<?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>121823</bug_id>
          
          <creation_ts>2013-09-23 22:00:50 -0700</creation_ts>
          <short_desc>Use unique_ptr instead of deleteAllValues in FloatingObject code</short_desc>
          <delta_ts>2013-09-23 22:52:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932424</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-23 22:00:50 -0700</bug_when>
    <thetext>Use unique_ptr instead of deleteAllValues in FloatingObject code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932427</commentid>
    <comment_count>1</comment_count>
      <attachid>212426</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-23 22:21:51 -0700</bug_when>
    <thetext>Created attachment 212426
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932428</commentid>
    <comment_count>2</comment_count>
      <attachid>212426</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-23 22:29:42 -0700</bug_when>
    <thetext>Comment on attachment 212426
Patch

Attachment 212426 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1976114</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932429</commentid>
    <comment_count>3</comment_count>
      <attachid>212426</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-23 22:31:18 -0700</bug_when>
    <thetext>Comment on attachment 212426
Patch

Attachment 212426 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1903306</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932430</commentid>
    <comment_count>4</comment_count>
      <attachid>212427</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-23 22:40:29 -0700</bug_when>
    <thetext>Created attachment 212427
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932431</commentid>
    <comment_count>5</comment_count>
      <attachid>212427</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-23 22:45:56 -0700</bug_when>
    <thetext>Comment on attachment 212427
Patch

Attachment 212427 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/2004503</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932432</commentid>
    <comment_count>6</comment_count>
      <attachid>212427</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-23 22:46:20 -0700</bug_when>
    <thetext>Comment on attachment 212427
Patch

Attachment 212427 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1806248</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932433</commentid>
    <comment_count>7</comment_count>
      <attachid>212428</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-23 22:47:19 -0700</bug_when>
    <thetext>Created attachment 212428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932435</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-23 22:52:41 -0700</bug_when>
    <thetext>Committed r156319: &lt;http://trac.webkit.org/changeset/156319&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212426</attachid>
            <date>2013-09-23 22:21:51 -0700</date>
            <delta_ts>2013-09-23 22:40:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121823-20130923222150.patch</filename>
            <type>text/plain</type>
            <size>61000</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2MzE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWM0ODliOTAyZGZkYjcx
YjA5ODljNzY3YjQ3MGJlMDVhYjRkOGFkNC4uMjkxZmJjNGNjMDU2MmZjZWVlZGI3MjBkZWQ1OTUw
NDY3MzYwZDg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDEzLTA5LTIzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgdW5pcXVlX3B0ciBpbnN0
ZWFkIG9mIGRlbGV0ZUFsbFZhbHVlcyBpbiBGbG9hdGluZ09iamVjdCBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE4MjMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmluZy9GbG9hdGlu
Z09iamVjdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmNyZWF0ZSk6
IFJldHVybiBhIHVuaXF1ZV9wdHIgaW5zdGVhZCBvZiBQYXNzT3duUHRyLgorICAgICAgICBVc2Ug
YXV0byBhbmQgYSB3b3JkIGZvciB0aGUgbG9jYWwgdmFyaWFibGUgaW5zdGVhZCBvZiBhbiBhYmJy
ZXZpYXRpb24uIEFsc28KKyAgICAgICAgY2hhbmdlZCB0byB0YWtlIGEgcmVmZXJlbmNlIGluc3Rl
YWQgb2YgYSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmNvcHlU
b05ld0NvbnRhaW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6
OnVuc2FmZUNsb25lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6
On5GbG9hdGluZ09iamVjdHMpOiBSZW1vdmVkIGNhbGwgdG8gZGVsZXRlQWxsVmFsdWVzLgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpjbGVhckxpbmVCb3hUcmVlUG9pbnRlcnMp
OiBVc2UgYXV0byB0byBtYWtlIHRoaXMKKyAgICAgICAgcmVhZCBjbGVhcmx5LgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpjbGVhcik6IFJlbW92ZWQgY2FsbCB0byBkZWxldGVB
bGxWYWx1ZXMuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6Om1vdmVBbGxUb0Zs
b2F0SW5mb01hcCk6IFVzZSBzdGQ6Om1vdmUgdG8gbW92ZSB2YWx1ZXMKKyAgICAgICAgb3V0IG9m
IHRoZSBzZXQsIGludG8gdGhlIG1hcC4gUmVtb3ZlZCBjb2RlIHRvIGNsZWFyIHRoZSBzZXQsIHNp
bmNlIGl0IHdhcyBhCisgICAgICAgIHRyaWNrIHRvIHByZXZlbnQgdGhlIHZhbHVlcyBmcm9tIGJl
aW5nIGRlbGV0ZWQgd2hlbiB0aGV5IHdlcmUgbm90IG1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6
RmxvYXRpbmdPYmplY3RzOjphZGQpOiBDaGFuZ2VkIHRvIHRha2UgYSB1bmlxdWVfcHRyIGFuZCB0
byBtb3ZlIHRoZQorICAgICAgICBwb2ludGVyIGludG8gdGhlIHNldCBpbnN0ZWFkIG9mIHVzaW5n
IGxlYWtQdHIuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZSk6IFJl
YXJyYW5nZWQgY29kZSBzbyB0aGF0IHRoZSByZW1vdmUgaXMgYXQKKyAgICAgICAgdGhlIGVuZCBv
ZiB0aGUgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGJlZ2lubmluZy4gQWxzbyBoYWQgdG8gdXNl
IGEgaGFzaAorICAgICAgICB0cmFuc2xhdG9yIGFuZCBhIGZpbmQvcmVtb3ZlIGNvbWJvIHNpbmNl
IHdlIGRvbid0IGhhdmUgaGFzaCB0cmFuc2xhdG9yIHZlcnNpb24KKyAgICAgICAgb2YgdGhlIHJl
bW92ZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHV0
ZVBsYWNlZEZsb2F0c1RyZWUpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIHRoZSB0
eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6cGxhY2VkRmxvYXRzVHJl
ZSk6IE1vdmVkIHRoaXMgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkCisgICAgICAgIG9mIGhhdmluZyBp
dCBpbiB0aGUgaGVhZGVyLCBzaW5jZSBpdCdzIG9ubHkgdXNlZCB3aXRoaW4gdGhlIGZpbGUuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmg6IENoYW5nZWQgZnVuY3Rpb25z
IHRvIHRha2UgcmVmZXJlbmNlcyBpbnN0ZWFkCisgICAgICAgIG9mIHBvaW50ZXJzIGFuZCByZXR1
cm4gdW5pcXVlX3B0ciBpbnN0ZWFkIG9mIFBhc3NPd25QdHIuIEFsc28gbWFkZQorICAgICAgICBj
b25zdHJ1Y3RvcnMgcHVibGljIHNvIHdlIGNhbiB1c2UgdGhlbSB3aXRoIG1ha2VfdW5pcXVlLiBD
aGFuZ2VkIHR5cGVzIHRvCisgICAgICAgIHVzZSB1bmlxdWVfcHRyIGluc3RlYWQgb2YgcmF3IHBv
aW50ZXJzLCBhbmQgbWFkZSB0aGUgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcgorICAgICAg
ICB3b3JrIGZvciBib3RoIFJlbmRlckJveCYgYW5kIEZsb2F0aW5nT2JqZWN0Ji4KKworICAgICAg
ICAqIHJlbmRlcmluZy9MaW5lV2lkdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRo
OjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICBVcGRh
dGVkIGZvciBjaGFuZ2VzIHRvIHR5cGVzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bW92ZUFsbENoaWxkcmVuSW5jbHVkaW5n
RmxvYXRzVG8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJv
bUZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5n
aW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpjb250YWluc0Zsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxvYXRzRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjp1cGRhdGVMb2NhbEZsb2F0aW5nT2JqZWN0c0ZvclBhaW50aW5nQ29u
dGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQpOgorICAg
ICAgICBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvIHR5cGVzLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6
OmNsZWFyRmxvYXRzKTogVXBkYXRlZCB0byB1c2UgdGFrZSBpbnN0ZWFkIG9mCisgICAgICAgIGEg
Y29tYmluYXRpb24gb2YgcmVtb3ZlIGFuZCBkZWxldGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpsYXlvdXRSdW5zQW5kRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
YXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGlua1RvRW5kTGluZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpjaGVja1BhZ2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUpOgorICAgICAgICBVcGRhdGVkIGZv
ciBjaGFuZ2VzIHRvIHR5cGVzLgorCiAyMDEzLTA5LTIzICBHdXJwcmVldCBLYXVyICA8ay5ndXJw
cmVldEBzYW1zdW5nLmNvbT4KIAogICAgICAgICBDU1MgVW5pdCB2aCwgdncsIHZtaW4gYW5kIHZt
YXggaW4gYm94LXNoYWRvdyBhcmUgbm90IGFwcGxpZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9GbG9hdGluZ09iamVjdHMuY3BwCmluZGV4IGEzZjgyMDhhYWEzM2Q2ODJhODZkZGYwZTY0
ZWJmNDFmNGY4Y2M2OGMuLmNkNDY4NDQ5ODRjMGNkOTY1YWZmMWZiYjQ5Yzc2Njg0NDUxMGE0Njkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCkBAIC00
Miw5ICs0Miw5IEBAIHN0cnVjdCBTYW1lU2l6ZUFzRmxvYXRpbmdPYmplY3QgewogCiBDT01QSUxF
X0FTU0VSVChzaXplb2YoRmxvYXRpbmdPYmplY3QpID09IHNpemVvZihTYW1lU2l6ZUFzRmxvYXRp
bmdPYmplY3QpLCBGbG9hdGluZ09iamVjdF9zaG91bGRfc3RheV9zbWFsbCk7CiAKLUZsb2F0aW5n
T2JqZWN0OjpGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIHJlbmRlcmVyKQorRmxvYXRpbmdPYmpl
Y3Q6OkZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCYgcmVuZGVyZXIpCiAgICAgOiBtX3JlbmRlcmVy
KHJlbmRlcmVyKQotICAgICwgbV9vcmlnaW5hdGluZ0xpbmUoMCkKKyAgICAsIG1fb3JpZ2luYXRp
bmdMaW5lKG51bGxwdHIpCiAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQogICAgICwgbV9zaG91
bGRQYWludCh0cnVlKQogICAgICwgbV9pc0Rlc2NlbmRhbnQoZmFsc2UpCkBAIC01Myw3ICs1Myw3
IEBAIEZsb2F0aW5nT2JqZWN0OjpGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIHJlbmRlcmVyKQog
ICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxzZSkKICNlbmRpZgogewotICAgIEVGbG9hdCB0eXBl
ID0gcmVuZGVyZXItPnN0eWxlKCktPmZsb2F0aW5nKCk7CisgICAgRUZsb2F0IHR5cGUgPSByZW5k
ZXJlci5zdHlsZSgpLT5mbG9hdGluZygpOwogICAgIEFTU0VSVCh0eXBlICE9IE5vRmxvYXQpOwog
ICAgIGlmICh0eXBlID09IExlZnRGbG9hdCkKICAgICAgICAgbV90eXBlID0gRmxvYXRMZWZ0OwpA
QCAtNjEsOSArNjEsOSBAQCBGbG9hdGluZ09iamVjdDo6RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94
KiByZW5kZXJlcikKICAgICAgICAgbV90eXBlID0gRmxvYXRSaWdodDsKIH0KIAotRmxvYXRpbmdP
YmplY3Q6OkZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogcmVuZGVyZXIsIFR5cGUgdHlwZSwgY29u
c3QgTGF5b3V0UmVjdCYgZnJhbWVSZWN0LCBib29sIHNob3VsZFBhaW50LCBib29sIGlzRGVzY2Vu
ZGFudCkKK0Zsb2F0aW5nT2JqZWN0OjpGbG9hdGluZ09iamVjdChSZW5kZXJCb3gmIHJlbmRlcmVy
LCBUeXBlIHR5cGUsIGNvbnN0IExheW91dFJlY3QmIGZyYW1lUmVjdCwgYm9vbCBzaG91bGRQYWlu
dCwgYm9vbCBpc0Rlc2NlbmRhbnQpCiAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQotICAgICwg
bV9vcmlnaW5hdGluZ0xpbmUoMCkKKyAgICAsIG1fb3JpZ2luYXRpbmdMaW5lKG51bGxwdHIpCiAg
ICAgLCBtX2ZyYW1lUmVjdChmcmFtZVJlY3QpCiAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQog
ICAgICwgbV90eXBlKHR5cGUpCkBAIC03NiwyNyArNzYsMjYgQEAgRmxvYXRpbmdPYmplY3Q6OkZs
b2F0aW5nT2JqZWN0KFJlbmRlckJveCogcmVuZGVyZXIsIFR5cGUgdHlwZSwgY29uc3QgTGF5b3V0
UmVjdCYKIHsKIH0KIAotUGFzc093blB0cjxGbG9hdGluZ09iamVjdD4gRmxvYXRpbmdPYmplY3Q6
OmNyZWF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyKQorc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2Jq
ZWN0PiBGbG9hdGluZ09iamVjdDo6Y3JlYXRlKFJlbmRlckJveCYgcmVuZGVyZXIpCiB7Ci0gICAg
T3duUHRyPEZsb2F0aW5nT2JqZWN0PiBuZXdPYmogPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmpl
Y3QocmVuZGVyZXIpKTsKLSAgICBuZXdPYmotPnNldFNob3VsZFBhaW50KCFyZW5kZXJlci0+aGFz
U2VsZlBhaW50aW5nTGF5ZXIoKSk7IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQgd2ls
bCBwYWludCBpdHNlbGYuIE90aGVyd2lzZSBzb21lb25lIGVsc2Ugd2lsbC4KLSAgICBuZXdPYmot
PnNldElzRGVzY2VuZGFudCh0cnVlKTsKLQotICAgIHJldHVybiBuZXdPYmoucmVsZWFzZSgpOwor
ICAgIGF1dG8gb2JqZWN0ID0gc3RkOjptYWtlX3VuaXF1ZTxGbG9hdGluZ09iamVjdD4ocmVuZGVy
ZXIpOworICAgIG9iamVjdC0+c2V0U2hvdWxkUGFpbnQoIXJlbmRlcmVyLmhhc1NlbGZQYWludGlu
Z0xheWVyKCkpOyAvLyBJZiBhIGxheWVyIGV4aXN0cywgdGhlIGZsb2F0IHdpbGwgcGFpbnQgaXRz
ZWxmLiBPdGhlcndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCisgICAgb2JqZWN0LT5zZXRJc0Rlc2Nl
bmRhbnQodHJ1ZSk7CisgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotUGFzc093blB0cjxGbG9hdGlu
Z09iamVjdD4gRmxvYXRpbmdPYmplY3Q6OmNvcHlUb05ld0NvbnRhaW5lcihMYXlvdXRTaXplIG9m
ZnNldCwgYm9vbCBzaG91bGRQYWludCwgYm9vbCBpc0Rlc2NlbmRhbnQpIGNvbnN0CitzdGQ6OnVu
aXF1ZV9wdHI8RmxvYXRpbmdPYmplY3Q+IEZsb2F0aW5nT2JqZWN0Ojpjb3B5VG9OZXdDb250YWlu
ZXIoTGF5b3V0U2l6ZSBvZmZzZXQsIGJvb2wgc2hvdWxkUGFpbnQsIGJvb2wgaXNEZXNjZW5kYW50
KSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3QocmVuZGVy
ZXIoKSwgdHlwZSgpLCBMYXlvdXRSZWN0KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkgLSBvZmZzZXQs
IGZyYW1lUmVjdCgpLnNpemUoKSksIHNob3VsZFBhaW50LCBpc0Rlc2NlbmRhbnQpKTsKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxGbG9hdGluZ09iamVjdD4ocmVuZGVyZXIoKSwgdHlwZSgp
LCBMYXlvdXRSZWN0KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkgLSBvZmZzZXQsIGZyYW1lUmVjdCgp
LnNpemUoKSksIHNob3VsZFBhaW50LCBpc0Rlc2NlbmRhbnQpOwogfQogCi1QYXNzT3duUHRyPEZs
b2F0aW5nT2JqZWN0PiBGbG9hdGluZ09iamVjdDo6dW5zYWZlQ2xvbmUoKSBjb25zdAorc3RkOjp1
bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiBGbG9hdGluZ09iamVjdDo6dW5zYWZlQ2xvbmUoKSBj
b25zdAogewotICAgIE93blB0cjxGbG9hdGluZ09iamVjdD4gY2xvbmVPYmplY3QgPSBhZG9wdFB0
cihuZXcgRmxvYXRpbmdPYmplY3QocmVuZGVyZXIoKSwgdHlwZSgpLCBtX2ZyYW1lUmVjdCwgbV9z
aG91bGRQYWludCwgbV9pc0Rlc2NlbmRhbnQpKTsKKyAgICBhdXRvIGNsb25lT2JqZWN0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxGbG9hdGluZ09iamVjdD4ocmVuZGVyZXIoKSwgdHlwZSgpLCBtX2ZyYW1l
UmVjdCwgbV9zaG91bGRQYWludCwgbV9pc0Rlc2NlbmRhbnQpOwogICAgIGNsb25lT2JqZWN0LT5t
X29yaWdpbmF0aW5nTGluZSA9IG1fb3JpZ2luYXRpbmdMaW5lOwogICAgIGNsb25lT2JqZWN0LT5t
X3BhZ2luYXRpb25TdHJ1dCA9IG1fcGFnaW5hdGlvblN0cnV0OwogICAgIGNsb25lT2JqZWN0LT5t
X2lzUGxhY2VkID0gbV9pc1BsYWNlZDsKLSAgICByZXR1cm4gY2xvbmVPYmplY3QucmVsZWFzZSgp
OworICAgIHJldHVybiBjbG9uZU9iamVjdDsKIH0KIAogdGVtcGxhdGUgPEZsb2F0aW5nT2JqZWN0
OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgpAQCAtMTQ4LDE1ICsxNDcsMTIgQEAgRmxvYXRpbmdPYmpl
Y3RzOjpGbG9hdGluZ09iamVjdHMoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBib29sIGhv
cml6b250YWxXcmkKIAogRmxvYXRpbmdPYmplY3RzOjp+RmxvYXRpbmdPYmplY3RzKCkKIHsKLSAg
ICAvLyBGSVhNRTogbV9zZXQgc2hvdWxkIHVzZSBPd25QdHIgaW5zdGVhZC4KLSAgICBkZWxldGVB
bGxWYWx1ZXMobV9zZXQpOwogfQogCiB2b2lkIEZsb2F0aW5nT2JqZWN0czo6Y2xlYXJMaW5lQm94
VHJlZVBvaW50ZXJzKCkKIHsKICAgICAvLyBDbGVhciByZWZlcmVuY2VzIHRvIG9yaWdpbmF0aW5n
IGxpbmVzLCBzaW5jZSB0aGUgbGluZXMgYXJlIGJlaW5nIGRlbGV0ZWQKLSAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOwotICAgIGZvciAoRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBpdCA9IG1fc2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
IGZvciAoYXV0byBpdCA9IG1fc2V0LmJlZ2luKCksIGVuZCA9IG1fc2V0LmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgQVNTRVJUKCEoKCppdCktPm9yaWdpbmF0aW5nTGluZSgpKSB8
fCAmKCgqaXQpLT5vcmlnaW5hdGluZ0xpbmUoKS0+cmVuZGVyZXIoKSkgPT0gbV9yZW5kZXJlcik7
CiAgICAgICAgICgqaXQpLT5zZXRPcmlnaW5hdGluZ0xpbmUoMCk7CiAgICAgfQpAQCAtMTY0LDcg
KzE2MCw2IEBAIHZvaWQgRmxvYXRpbmdPYmplY3RzOjpjbGVhckxpbmVCb3hUcmVlUG9pbnRlcnMo
KQogCiB2b2lkIEZsb2F0aW5nT2JqZWN0czo6Y2xlYXIoKQogewotICAgIGRlbGV0ZUFsbFZhbHVl
cyhtX3NldCk7CiAgICAgbV9zZXQuY2xlYXIoKTsKICAgICBtX3BsYWNlZEZsb2F0c1RyZWUuY2xl
YXIoKTsKICAgICBtX2xlZnRPYmplY3RzQ291bnQgPSAwOwpAQCAtMTczLDE0ICsxNjgsMTMgQEAg
dm9pZCBGbG9hdGluZ09iamVjdHM6OmNsZWFyKCkKIAogdm9pZCBGbG9hdGluZ09iamVjdHM6Om1v
dmVBbGxUb0Zsb2F0SW5mb01hcChSZW5kZXJlclRvRmxvYXRJbmZvTWFwJiBtYXApCiB7Ci0gICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsKLSAgICBmb3IgKEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX3NldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7Ci0gICAgICAgIG1hcC5hZGQo
Zi0+cmVuZGVyZXIoKSwgZik7CisgICAgZm9yIChhdXRvIGl0ID0gbV9zZXQuYmVnaW4oKSwgZW5k
ID0gbV9zZXQuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBhdXRvJiByZW5kZXJl
ciA9IGl0LT5nZXQoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgLy8gRklYTUU6IFRoZSBvbmx5IHJl
YXNvbiBpdCBpcyBzYWZlIHRvIG1vdmUgdGhlc2Ugb3V0IG9mIHRoZSBzZXQgaXMgdGhhdAorICAg
ICAgICAvLyB3ZSBhcmUgYWJvdXQgdG8gY2xlYXIgaXQuIE90aGVyd2lzZSBpdCB3b3VsZCBicmVh
ayB0aGUgaGFzaCB0YWJsZSBpbnZhcmlhbnQuCisgICAgICAgIC8vIEEgY2xlYW4gd2F5IHRvIGRv
IHRoaXMgd291bGQgYmUgdG8gYWRkIGEgdGFrZUFsbCBmdW5jdGlvbiB0byBIYXNoU2V0LgorICAg
ICAgICBtYXAuYWRkKCZyZW5kZXJlciwgc3RkOjptb3ZlKCppdCkpOwogICAgIH0KLSAgICAvLyBj
bGVhciBzZXQgYmVmb3JlIGNsZWFyaW5nIHRoaXMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGRl
bGV0ZSBhbGwgb2YKLSAgICAvLyB0aGUgb2JqZWN0cyB3ZSBoYXZlIGp1c3QgdHJhbnNmZXJyZWQu
Ci0gICAgbV9zZXQuY2xlYXIoKTsKICAgICBjbGVhcigpOwogfQogCkBAIC0yMzUsMjUgKzIyOSwy
NiBAQCB2b2lkIEZsb2F0aW5nT2JqZWN0czo6cmVtb3ZlUGxhY2VkT2JqZWN0KEZsb2F0aW5nT2Jq
ZWN0KiBmbG9hdGluZ09iamVjdCkKICNlbmRpZgogfQogCi1GbG9hdGluZ09iamVjdCogRmxvYXRp
bmdPYmplY3RzOjphZGQoUGFzc093blB0cjxGbG9hdGluZ09iamVjdD4gZmxvYXRpbmdPYmplY3Qp
CitGbG9hdGluZ09iamVjdCogRmxvYXRpbmdPYmplY3RzOjphZGQoc3RkOjp1bmlxdWVfcHRyPEZs
b2F0aW5nT2JqZWN0PiBmbG9hdGluZ09iamVjdCkKIHsKLSAgICBGbG9hdGluZ09iamVjdCogbmV3
T2JqZWN0ID0gZmxvYXRpbmdPYmplY3QubGVha1B0cigpOwotICAgIGluY3JlYXNlT2JqZWN0c0Nv
dW50KG5ld09iamVjdC0+dHlwZSgpKTsKLSAgICBtX3NldC5hZGQobmV3T2JqZWN0KTsKLSAgICBp
ZiAobmV3T2JqZWN0LT5pc1BsYWNlZCgpKQotICAgICAgICBhZGRQbGFjZWRPYmplY3QobmV3T2Jq
ZWN0KTsKLSAgICByZXR1cm4gbmV3T2JqZWN0OworICAgIGluY3JlYXNlT2JqZWN0c0NvdW50KGZs
b2F0aW5nT2JqZWN0LT50eXBlKCkpOworICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQo
KSkKKyAgICAgICAgYWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0LmdldCgpKTsKKyAgICBy
ZXR1cm4gbV9zZXQuYWRkKHN0ZDo6bW92ZShmbG9hdGluZ09iamVjdCkpLml0ZXJhdG9yLT5nZXQo
KTsKIH0KIAogdm9pZCBGbG9hdGluZ09iamVjdHM6OnJlbW92ZShGbG9hdGluZ09iamVjdCogZmxv
YXRpbmdPYmplY3QpCiB7CisgICAgQVNTRVJUKChtX3NldC5jb250YWluczxGbG9hdGluZ09iamVj
dCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpmbG9hdGluZ09iamVjdCkpKTsKICAg
ICBkZWNyZWFzZU9iamVjdHNDb3VudChmbG9hdGluZ09iamVjdC0+dHlwZSgpKTsKLSAgICBtX3Nl
dC5yZW1vdmUoZmxvYXRpbmdPYmplY3QpOwogICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQ
bGFjZWQoKSB8fCAhZmxvYXRpbmdPYmplY3QtPmlzSW5QbGFjZWRUcmVlKCkpOwogICAgIGlmIChm
bG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKICAgICAgICAgcmVtb3ZlUGxhY2VkT2JqZWN0KGZs
b2F0aW5nT2JqZWN0KTsKICAgICBBU1NFUlQoIWZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xp
bmUoKSk7Ci0gICAgZGVsZXRlIGZsb2F0aW5nT2JqZWN0OworICAgIGF1dG8gaXQgPSBtX3NldC5m
aW5kPEZsb2F0aW5nT2JqZWN0JiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4oKmZsb2F0
aW5nT2JqZWN0KTsKKyAgICBpZiAoaXQgPT0gbV9zZXQuZW5kKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3NldC5yZW1vdmUoaXQpOwogfQogCiB2b2lkIEZsb2F0aW5nT2JqZWN0czo6Y29tcHV0
ZVBsYWNlZEZsb2F0c1RyZWUoKQpAQCAtMjYyLDE1ICsyNTcsMjAgQEAgdm9pZCBGbG9hdGluZ09i
amVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCkKICAgICBpZiAobV9zZXQuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmluaXRJZk5lZWRlZCht
X3JlbmRlcmVyLT52aWV3KCkuaW50ZXJ2YWxBcmVuYSgpKTsKLSAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gbV9zZXQuYmVnaW4oKTsKLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGVuZCA9IG1fc2V0LmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKml0OworICAgIGZvciAoYXV0
byBpdCA9IG1fc2V0LmJlZ2luKCksIGVuZCA9IG1fc2V0LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gaXQtPmdldCgpOwog
ICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCiAgICAgICAgICAgICBtX3Bs
YWNlZEZsb2F0c1RyZWUuYWRkKGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmpl
Y3QpKTsKICAgICB9CiB9CiAKK2lubGluZSBjb25zdCBGbG9hdGluZ09iamVjdFRyZWUmIEZsb2F0
aW5nT2JqZWN0czo6cGxhY2VkRmxvYXRzVHJlZSgpCit7CisgICAgaWYgKCFtX3BsYWNlZEZsb2F0
c1RyZWUuaXNJbml0aWFsaXplZCgpKQorICAgICAgICBjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSgp
OworICAgIHJldHVybiBtX3BsYWNlZEZsb2F0c1RyZWU7Cit9CisKIExheW91dFVuaXQgRmxvYXRp
bmdPYmplY3RzOjpsb2dpY2FsTGVmdE9mZnNldChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlv
dXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRl
RmxvYXRPZmZzZXRNb2RlIG9mZnNldE1vZGUsIExheW91dFVuaXQgKmhlaWdodFJlbWFpbmluZykK
IHsKICNpZiAhRU5BQkxFKENTU19TSEFQRVMpCkBAIC0yODcsNyArMjg3LDcgQEAgTGF5b3V0VW5p
dCBGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxMZWZ0T2Zmc2V0KExheW91dFVuaXQgZml4ZWRPZmZz
ZXQsIExheW91dFVuaXQKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBjb25zdCBGbG9hdGlu
Z09iamVjdCogb3V0ZXJtb3N0RmxvYXQgPSBhZGFwdGVyLm91dGVybW9zdEZsb2F0KCk7CiAgICAg
aWYgKG9mZnNldE1vZGUgPT0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCAmJiBvdXRlcm1v
c3RGbG9hdCkgewotICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0g
b3V0ZXJtb3N0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0c2lkZUluZm8oKSkgeworICAgICAg
ICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gb3V0ZXJtb3N0RmxvYXQtPnJl
bmRlcmVyKCkuc2hhcGVPdXRzaWRlSW5mbygpKSB7CiAgICAgICAgICAgICBzaGFwZU91dHNpZGUt
PnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUobV9yZW5kZXJlciwgb3V0ZXJtb3N0
RmxvYXQsIGxvZ2ljYWxUb3AsIGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgb2Zmc2V0ICs9
IHNoYXBlT3V0c2lkZS0+cmlnaHRNYXJnaW5Cb3hEZWx0YSgpOwogICAgICAgICB9CkBAIC0zMTMs
NyArMzEzLDcgQEAgTGF5b3V0VW5pdCBGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxSaWdodE9mZnNl
dChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbmkKICNpZiBFTkFCTEUoQ1NTX1NIQVBF
UykKICAgICBjb25zdCBGbG9hdGluZ09iamVjdCogb3V0ZXJtb3N0RmxvYXQgPSBhZGFwdGVyLm91
dGVybW9zdEZsb2F0KCk7CiAgICAgaWYgKG9mZnNldE1vZGUgPT0gU2hhcGVPdXRzaWRlRmxvYXRT
aGFwZU9mZnNldCAmJiBvdXRlcm1vc3RGbG9hdCkgewotICAgICAgICBpZiAoU2hhcGVPdXRzaWRl
SW5mbyogc2hhcGVPdXRzaWRlID0gb3V0ZXJtb3N0RmxvYXQtPnJlbmRlcmVyKCktPnNoYXBlT3V0
c2lkZUluZm8oKSkgeworICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRl
ID0gb3V0ZXJtb3N0RmxvYXQtPnJlbmRlcmVyKCkuc2hhcGVPdXRzaWRlSW5mbygpKSB7CiAgICAg
ICAgICAgICBzaGFwZU91dHNpZGUtPnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUo
bV9yZW5kZXJlciwgb3V0ZXJtb3N0RmxvYXQsIGxvZ2ljYWxUb3AsIGxvZ2ljYWxIZWlnaHQpOwog
ICAgICAgICAgICAgb2Zmc2V0ICs9IHNoYXBlT3V0c2lkZS0+bGVmdE1hcmdpbkJveERlbHRhKCk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGlu
Z09iamVjdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuaApp
bmRleCAyOTZjN2Q2MWVlMDNhNjc2NWY5YzIwYjBkYWFiZjg0N2RiY2E5MGIwLi5jZGE1YTNjZmNj
MGFmYjU0Zjk3NzIzODE5NDc3NTMzNzQyZWVkMTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0Zsb2F0aW5nT2JqZWN0cy5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiUE9ESW50
ZXJ2YWxUcmVlLmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgPHd0Zi9M
aXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00MiwxNCArNDEsMTUgQEAgcHVibGljOgogICAgIC8vIE5vdGUgdGhhdCBUeXBl
IHVzZXMgYml0cyBzbyB5b3UgY2FuIHVzZSBGbG9hdExlZnRSaWdodCBhcyBhIG1hc2sgdG8gcXVl
cnkgZm9yIGJvdGggbGVmdCBhbmQgcmlnaHQuCiAgICAgZW51bSBUeXBlIHsgRmxvYXRMZWZ0ID0g
MSwgRmxvYXRSaWdodCA9IDIsIEZsb2F0TGVmdFJpZ2h0ID0gMyB9OwogCi0gICAgc3RhdGljIFBh
c3NPd25QdHI8RmxvYXRpbmdPYmplY3Q+IGNyZWF0ZShSZW5kZXJCb3gqKTsKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiBjcmVhdGUoUmVuZGVyQm94Jik7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiBjb3B5VG9OZXdDb250YWluZXIoTGF5b3V0
U2l6ZSwgYm9vbCBzaG91bGRQYWludCA9IGZhbHNlLCBib29sIGlzRGVzY2VuZGFudCA9IGZhbHNl
KSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRpbmdPYmplY3Q+IHVuc2FmZUNsb25l
KCkgY29uc3Q7CiAKLSAgICBQYXNzT3duUHRyPEZsb2F0aW5nT2JqZWN0PiBjb3B5VG9OZXdDb250
YWluZXIoTGF5b3V0U2l6ZSwgYm9vbCBzaG91bGRQYWludCA9IGZhbHNlLCBib29sIGlzRGVzY2Vu
ZGFudCA9IGZhbHNlKSBjb25zdDsKLQotICAgIFBhc3NPd25QdHI8RmxvYXRpbmdPYmplY3Q+IHVu
c2FmZUNsb25lKCkgY29uc3Q7CisgICAgZXhwbGljaXQgRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94
Jik7CisgICAgRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94JiwgVHlwZSwgY29uc3QgTGF5b3V0UmVj
dCYsIGJvb2wgc2hvdWxkUGFpbnQsIGJvb2wgaXNEZXNjZW5kYW50KTsKIAogICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KLSAgICBSZW5k
ZXJCb3gqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQorICAgIFJlbmRl
ckJveCYgcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyOyB9CiAKICAgICBib29s
IGlzUGxhY2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BsYWNlZDsgfQogICAgIHZvaWQgc2V0SXNQ
bGFjZWQoYm9vbCBwbGFjZWQgPSB0cnVlKSB7IG1faXNQbGFjZWQgPSBwbGFjZWQ7IH0KQEAgLTEy
NywxMCArMTI3LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBG
bG9hdGluZ09iamVjdChSZW5kZXJCb3gqKTsKLSAgICBGbG9hdGluZ09iamVjdChSZW5kZXJCb3gq
LCBUeXBlLCBjb25zdCBMYXlvdXRSZWN0JiwgYm9vbCBzaG91bGRQYWludCwgYm9vbCBpc0Rlc2Nl
bmRhbnQpOwotCi0gICAgUmVuZGVyQm94KiBtX3JlbmRlcmVyOworICAgIFJlbmRlckJveCYgbV9y
ZW5kZXJlcjsKICAgICBSb290SW5saW5lQm94KiBtX29yaWdpbmF0aW5nTGluZTsKICAgICBMYXlv
dXRSZWN0IG1fZnJhbWVSZWN0OwogICAgIGludCBtX3BhZ2luYXRpb25TdHJ1dDsgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGEgTGF5b3V0VW5pdCwgc2luY2UgaXQncyBhIHZlcnRpY2FsIG9mZnNl
dC4KQEAgLTE0NSwyMCArMTQyLDI2IEBAIHByaXZhdGU6CiB9OwogCiBzdHJ1Y3QgRmxvYXRpbmdP
YmplY3RIYXNoRnVuY3Rpb25zIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChGbG9hdGluZ09i
amVjdCoga2V5KSB7IHJldHVybiBEZWZhdWx0SGFzaDxSZW5kZXJCb3gqPjo6SGFzaDo6aGFzaChr
ZXktPnJlbmRlcmVyKCkpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoRmxvYXRpbmdPYmplY3Qq
IGEsIEZsb2F0aW5nT2JqZWN0KiBiKSB7IHJldHVybiBhLT5yZW5kZXJlcigpID09IGItPnJlbmRl
cmVyKCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8
RmxvYXRpbmdPYmplY3Q+JiBrZXkpIHsgcmV0dXJuIFB0ckhhc2g8UmVuZGVyQm94Kj46Omhhc2go
JmtleS0+cmVuZGVyZXIoKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBzdGQ6OnVu
aXF1ZV9wdHI8RmxvYXRpbmdPYmplY3Q+JiBhLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRp
bmdPYmplY3Q+JiBiKSB7IHJldHVybiAmYS0+cmVuZGVyZXIoKSA9PSAmYi0+cmVuZGVyZXIoKTsg
fQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKIH07CiBzdHJ1Y3QgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvciB7Ci0gICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goUmVuZGVyQm94KiBrZXkpIHsgcmV0dXJuIERlZmF1bHRIYXNoPFJl
bmRlckJveCo+OjpIYXNoOjpoYXNoKGtleSk7IH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9h
dGluZ09iamVjdCogYSwgUmVuZGVyQm94KiBiKSB7IHJldHVybiBhLT5yZW5kZXJlcigpID09IGI7
IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZW5kZXJCb3gmIGtleSkgeyByZXR1
cm4gUHRySGFzaDxjb25zdCBSZW5kZXJCb3gqPjo6aGFzaCgma2V5KTsgfQorICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IEZsb2F0aW5nT2JqZWN0JiBrZXkpIHsgcmV0dXJuIFB0ckhhc2g8
UmVuZGVyQm94Kj46Omhhc2goJmtleS5yZW5kZXJlcigpKTsgfQorICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4mIGEsIGNvbnN0IFJlbmRl
ckJveCYgYikgeyByZXR1cm4gJmEtPnJlbmRlcmVyKCkgPT0gJmI7IH0KKyAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRpbmdPYmplY3Q+JiBhLCBjb25zdCBG
bG9hdGluZ09iamVjdCYgYikgeyByZXR1cm4gJmEtPnJlbmRlcmVyKCkgPT0gJmIucmVuZGVyZXIo
KTsgfQogfTsKLXR5cGVkZWYgTGlzdEhhc2hTZXQ8RmxvYXRpbmdPYmplY3QqLCA0LCBGbG9hdGlu
Z09iamVjdEhhc2hGdW5jdGlvbnM+IEZsb2F0aW5nT2JqZWN0U2V0OwotdHlwZWRlZiBGbG9hdGlu
Z09iamVjdFNldDo6Y29uc3RfaXRlcmF0b3IgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvcjsKKwor
dHlwZWRlZiBMaXN0SGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRpbmdPYmplY3Q+LCA0LCBG
bG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnM+IEZsb2F0aW5nT2JqZWN0U2V0OworCiB0eXBlZGVm
IFBPREludGVydmFsPGludCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdEludGVydmFs
OwogdHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8aW50LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5n
T2JqZWN0VHJlZTsKIHR5cGVkZWYgUE9ERnJlZUxpc3RBcmVuYTxQT0RSZWRCbGFja1RyZWU8Rmxv
YXRpbmdPYmplY3RJbnRlcnZhbD46Ok5vZGU+IEludGVydmFsQXJlbmE7Ci10eXBlZGVmIEhhc2hN
YXA8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3QqPiBSZW5kZXJlclRvRmxvYXRJbmZvTWFwOwor
CisvLyBGSVhNRTogVGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgdGhpbmcgYXMgRmxvYXRpbmdPYmpl
Y3RTZXQuCisvLyBDaGFuZ2UgY2xpZW50cyB0byB1c2UgdGhhdCBzZXQgZGlyZWN0bHksIGFuZCBy
ZXBsYWNlIHRoZSBtb3ZlQWxsVG9GbG9hdEluZm9NYXAgZnVuY3Rpb24gd2l0aCBhIHRha2VTZXQg
ZnVuY3Rpb24uCit0eXBlZGVmIEhhc2hNYXA8UmVuZGVyQm94Kiwgc3RkOjp1bmlxdWVfcHRyPEZs
b2F0aW5nT2JqZWN0Pj4gUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDsKIAogY2xhc3MgRmxvYXRpbmdP
YmplY3RzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGbG9hdGluZ09iamVjdHMpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTE2OCw3ICsxNzEsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNsZWFyKCk7CiAgICAgdm9pZCBtb3ZlQWxsVG9GbG9hdEluZm9NYXAoUmVuZGVyZXJUb0Zs
b2F0SW5mb01hcCYpOwotICAgIEZsb2F0aW5nT2JqZWN0KiBhZGQoUGFzc093blB0cjxGbG9hdGlu
Z09iamVjdD4pOworICAgIEZsb2F0aW5nT2JqZWN0KiBhZGQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0
aW5nT2JqZWN0Pik7CiAgICAgdm9pZCByZW1vdmUoRmxvYXRpbmdPYmplY3QqKTsKICAgICB2b2lk
IGFkZFBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCopOwogICAgIHZvaWQgcmVtb3ZlUGxhY2Vk
T2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7CkBAIC0xODAsMTQgKzE4MywxMCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjbGVhckxpbmVCb3hUcmVlUG9pbnRlcnMoKTsKICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0T2Zmc2V0KExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91dFVuaXQgbG9naWNhbFRv
cCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTaGFwZU91dHNpZGVGbG9hdE9mZnNldE1vZGUg
PSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0LCBMYXlvdXRVbml0KiBoZWlnaHRSZW1haW5p
bmcgPSAwKTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldChMYXlvdXRVbml0IGZp
eGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdo
dCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxvYXRTaGFwZU9m
ZnNldCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nID0gMCk7CisKIHByaXZhdGU6CiAgICAg
dm9pZCBjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSgpOwotICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
VHJlZSYgcGxhY2VkRmxvYXRzVHJlZSgpCi0gICAgewotICAgICAgICBpZiAoIW1fcGxhY2VkRmxv
YXRzVHJlZS5pc0luaXRpYWxpemVkKCkpCi0gICAgICAgICAgICBjb21wdXRlUGxhY2VkRmxvYXRz
VHJlZSgpOwotICAgICAgICByZXR1cm4gbV9wbGFjZWRGbG9hdHNUcmVlOwotICAgIH0KKyAgICBj
b25zdCBGbG9hdGluZ09iamVjdFRyZWUmIHBsYWNlZEZsb2F0c1RyZWUoKTsKICAgICB2b2lkIGlu
Y3JlYXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKICAgICB2b2lkIGRlY3Jl
YXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKICAgICBGbG9hdGluZ09iamVj
dEludGVydmFsIGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MaW5lV2lkdGguY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5jcHAKaW5kZXggZmMxZjQ2NzUxNDRmNmYxNGU1
ZWQwNmFkYTZhZjc4ZmZmZWZhNjczNi4uNTZhZjNmZjEwM2JkNjdhZjFjODU3ZDAyYjM2NmNlNjRm
ZTQ2ZDAzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5jcHAKQEAgLTEwMywy
MCArMTAzLDIwIEBAIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zs
b2F0SWZOZWVkZWQoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0CiAgICAgLy8gdGhlIGZpcnN0IHBy
ZXZpb3VzIGZsb2F0IHRoYXQgaXMgb24gdGhlIHNhbWUgc2lkZSBhcyBvdXIgbmV3RmxvYXQuCiAg
ICAgU2hhcGVPdXRzaWRlSW5mbyogcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvID0gMDsKICAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Jsb2NrLm1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBi
ZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CisgICAgYXV0byBpdCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOworICAgIGF1dG8gYmVnaW4gPSBmbG9hdGluZ09iamVjdFNldC5iZWdp
bigpOwogICAgIExheW91dFVuaXQgbGluZUhlaWdodCA9IG1fYmxvY2subGluZUhlaWdodChtX2lz
Rmlyc3RMaW5lLCBtX2Jsb2NrLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFs
TGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsKICAgICBm
b3IgKC0taXQ7IGl0ICE9IGJlZ2luOyAtLWl0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBw
cmV2aW91c0Zsb2F0ID0gKml0OworICAgICAgICBGbG9hdGluZ09iamVjdCogcHJldmlvdXNGbG9h
dCA9IGl0LT5nZXQoKTsKICAgICAgICAgaWYgKHByZXZpb3VzRmxvYXQgIT0gbmV3RmxvYXQgJiYg
cHJldmlvdXNGbG9hdC0+dHlwZSgpID09IG5ld0Zsb2F0LT50eXBlKCkpIHsKLSAgICAgICAgICAg
IHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbyA9IHByZXZpb3VzRmxvYXQtPnJlbmRlcmVyKCktPnNo
YXBlT3V0c2lkZUluZm8oKTsKKyAgICAgICAgICAgIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbyA9
IHByZXZpb3VzRmxvYXQtPnJlbmRlcmVyKCkuc2hhcGVPdXRzaWRlSW5mbygpOwogICAgICAgICAg
ICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgICAgICAgICBwcmV2aW91
c1NoYXBlT3V0c2lkZUluZm8tPnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUoJm1f
YmxvY2ssIHByZXZpb3VzRmxvYXQsIG1fYmxvY2subG9naWNhbEhlaWdodCgpLCBsaW5lSGVpZ2h0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU2hhcGVPdXRz
aWRlSW5mbyogc2hhcGVPdXRzaWRlSW5mbyA9IG5ld0Zsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91
dHNpZGVJbmZvKCk7CisgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlSW5mbyA9IG5l
d0Zsb2F0LT5yZW5kZXJlcigpLnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICBpZiAoc2hhcGVPdXRz
aWRlSW5mbykKICAgICAgICAgc2hhcGVPdXRzaWRlSW5mby0+dXBkYXRlRGVsdGFzRm9yQ29udGFp
bmluZ0Jsb2NrTGluZSgmbV9ibG9jaywgbmV3RmxvYXQsIG1fYmxvY2subG9naWNhbEhlaWdodCgp
LCBsaW5lSGVpZ2h0KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKaW5kZXggMzVkMGFkMjcxY2Y4YzFhMzc3MTUzODY1NGNhNjkxODNmMDQ5MjU5ZS4uNTNj
MTc1NWE2Y2UxMDJlOGU2NDhmNjhiYzZmNWQ2YWQzYTdmMjA1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0zMzYsMTYgKzMzNiwxNiBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eQogICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91dCAmJiBz
X2NhblByb3BhZ2F0ZUZsb2F0SW50b1NpYmxpbmcgJiYgIWNhblByb3BhZ2F0ZUZsb2F0SW50b1Np
YmxpbmcgJiYgaGFzT3ZlcmhhbmdpbmdGbG9hdHMoKSkgewogICAgICAgICBSZW5kZXJCbG9jayog
cGFyZW50QmxvY2sgPSB0aGlzOwogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAg
ICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAKICAgICAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGN1cnIgPSBwYXJlbnQoKTsgY3VyciAmJiAhY3Vyci0+aXNSZW5kZXJWaWV3
KCk7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewogICAgICAgICAgICAgaWYgKGN1cnItPmlzUmVu
ZGVyQmxvY2soKSkgewogICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjdXJyQmxvY2sgPSB0
b1JlbmRlckJsb2NrKGN1cnIpOwogCiAgICAgICAgICAgICAgICAgaWYgKGN1cnJCbG9jay0+aGFz
T3ZlcmhhbmdpbmdGbG9hdHMoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckJveCogcmVuZGVyZXIg
PSAoKml0KS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyQmxv
Y2stPmhhc092ZXJoYW5naW5nRmxvYXQocmVuZGVyZXIpKSB7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQm94JiByZW5kZXJlciA9ICgqaXQp
LT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJCbG9jay0+aGFz
T3ZlcmhhbmdpbmdGbG9hdCgmcmVuZGVyZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50QmxvY2sgPSBjdXJyQmxvY2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTM4LDEzICsxMTM4LDEzIEBA
IHZvaWQgUmVuZGVyQmxvY2s6Om1vdmVBbGxDaGlsZHJlbkluY2x1ZGluZ0Zsb2F0c1RvKFJlbmRl
ckJsb2NrKiB0b0Jsb2NrLCBib29sIGZ1CiAgICAgICAgICAgICB0b0Jsb2NrLT5jcmVhdGVGbG9h
dGluZ09iamVjdHMoKTsKIAogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZnJvbUZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZyb21GbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
KyAgICAgICAgYXV0byBlbmQgPSBmcm9tRmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAKLSAgICAg
ICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZnJvbUZsb2F0aW5nT2JqZWN0
U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIGZsb2F0aW5nT2JqZWN0ID0gKml0OworICAgICAgICBmb3IgKGF1dG8gaXQgPSBmcm9tRmxv
YXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBG
bG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7CiAKICAgICAgICAgICAg
IC8vIERvbid0IGluc2VydCB0aGUgb2JqZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUg
bGlzdAotICAgICAgICAgICAgaWYgKHRvQmxvY2stPmNvbnRhaW5zRmxvYXQoZmxvYXRpbmdPYmpl
Y3QtPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgaWYgKHRvQmxvY2stPmNvbnRhaW5zRmxvYXQo
JmZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICAgICAgdG9CbG9jay0+bV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09i
amVjdC0+dW5zYWZlQ2xvbmUoKSk7CkBAIC0xNjY4LDExICsxNjY4LDExIEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cygpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOwotICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBG
bG9hdGluZ09iamVjdCogciA9ICppdDsKKyAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IGl0LT5nZXQoKTsK
ICAgICAgICAgaWYgKHItPmlzRGVzY2VuZGFudCgpKQotICAgICAgICAgICAgYWRkT3ZlcmZsb3dG
cm9tQ2hpbGQoci0+cmVuZGVyZXIoKSwgSW50U2l6ZSh4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGlu
Z01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikpKTsKKyAgICAg
ICAgICAgIGFkZE92ZXJmbG93RnJvbUNoaWxkKCZyLT5yZW5kZXJlcigpLCBJbnRTaXplKHhQb3Np
dGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpLCB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGlu
Z01hcmdpbihyKSkpOwogICAgIH0KIH0KIApAQCAtMjE4MywxNyArMjE4MywxNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpyZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMoYm9vbCBwYWludEFsbERlc2NlbmRh
bnRzKQogICAgIC8vIGluIHRoaXMgYmxvY2suIEJldHRlciB5ZXQgd291bGQgYmUgdG8gcHVzaCBl
eHRyYSBzdGF0ZSBmb3IgdGhlIGNvbnRhaW5lcnMgb2Ygb3RoZXIgZmxvYXRzLgogICAgIExheW91
dFN0YXRlRGlzYWJsZXIgbGF5b3V0U3RhdGVEaXNhYmxlcigmdmlldygpKTsKICAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVj
dFNldC5lbmQoKTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRmxvYXRp
bmdPYmplY3QqIHIgPSAqaXQ7CisgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKKyAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBpdC0+Z2V0KCk7CiAgICAg
ICAgIC8vIE9ubHkgcmVwYWludCB0aGUgb2JqZWN0IGlmIGl0IGlzIG92ZXJoYW5naW5nLCBpcyBu
b3QgaW4gaXRzIG93biBsYXllciwgYW5kCiAgICAgICAgIC8vIGlzIG91ciByZXNwb25zaWJpbGl0
eSB0byBwYWludCAobV9zaG91bGRQYWludCBpcyBzZXQpLiBXaGVuIHBhaW50QWxsRGVzY2VuZGFu
dHMgaXMgdHJ1ZSwgdGhlIGxhdHRlcgogICAgICAgICAvLyBjb25kaXRpb24gaXMgcmVwbGFjZWQg
d2l0aCBiZWluZyBhIGRlc2NlbmRhbnQgb2YgdXMuCiAgICAgICAgIGlmIChyLT5sb2dpY2FsQm90
dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID4gbG9naWNhbEhlaWdodCgpCi0gICAgICAg
ICAgICAmJiAhci0+cmVuZGVyZXIoKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKQotICAgICAgICAg
ICAgJiYgKHItPnNob3VsZFBhaW50KCkgfHwgKHBhaW50QWxsRGVzY2VuZGFudHMgJiYgci0+cmVu
ZGVyZXIoKS0+aXNEZXNjZW5kYW50T2YodGhpcykpKSkgewotICAgICAgICAgICAgci0+cmVuZGVy
ZXIoKS0+cmVwYWludCgpOwotICAgICAgICAgICAgci0+cmVuZGVyZXIoKS0+cmVwYWludE92ZXJo
YW5naW5nRmxvYXRzKGZhbHNlKTsKKyAgICAgICAgICAgICYmICFyLT5yZW5kZXJlcigpLmhhc1Nl
bGZQYWludGluZ0xheWVyKCkKKyAgICAgICAgICAgICYmIChyLT5zaG91bGRQYWludCgpIHx8IChw
YWludEFsbERlc2NlbmRhbnRzICYmIHItPnJlbmRlcmVyKCkuaXNEZXNjZW5kYW50T2YodGhpcykp
KSkgeworICAgICAgICAgICAgci0+cmVuZGVyZXIoKS5yZXBhaW50KCk7CisgICAgICAgICAgICBy
LT5yZW5kZXJlcigpLnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhmYWxzZSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0yNTg2LDggKzI1ODYsOCBAQCBMYXlvdXRQb2ludCBSZW5kZXJCbG9jazo6
ZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGVGb3JDaGlsZChjb25zdCBGbG9hdGluZ09iamVjdCogYwog
ICAgIC8vIGl0J3MgZ29pbmcgdG8gZ2V0IGFkZGVkIGJhY2sgaW4uIFdlIGhpZGUgdGhpcyBjb21w
bGljYXRpb24gaGVyZSBzbyB0aGF0IHRoZSBjYWxsaW5nIGNvZGUgbG9va3Mgbm9ybWFsIGZvciB0
aGUgdW5mbGlwcGVkCiAgICAgLy8gY2FzZS4KICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKLSAgICAgICAgcmV0dXJuIExheW91dFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpICsg
aGVpZ2h0KCkgLSBjaGlsZC0+cmVuZGVyZXIoKS0+aGVpZ2h0KCkgLSAyICogeVBvc2l0aW9uRm9y
RmxvYXRJbmNsdWRpbmdNYXJnaW4oY2hpbGQpKTsKLSAgICByZXR1cm4gTGF5b3V0UG9pbnQocG9p
bnQueCgpICsgd2lkdGgoKSAtIGNoaWxkLT5yZW5kZXJlcigpLT53aWR0aCgpIC0gMiAqIHhQb3Np
dGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGNoaWxkKSwgcG9pbnQueSgpKTsKKyAgICAgICAg
cmV0dXJuIExheW91dFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpICsgaGVpZ2h0KCkgLSBjaGls
ZC0+cmVuZGVyZXIoKS5oZWlnaHQoKSAtIDIgKiB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01h
cmdpbihjaGlsZCkpOworICAgIHJldHVybiBMYXlvdXRQb2ludChwb2ludC54KCkgKyB3aWR0aCgp
IC0gY2hpbGQtPnJlbmRlcmVyKCkud2lkdGgoKSAtIDIgKiB4UG9zaXRpb25Gb3JGbG9hdEluY2x1
ZGluZ01hcmdpbihjaGlsZCksIHBvaW50LnkoKSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50RmxvYXRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQsIGJvb2wgcHJlc2VydmVQaGFzZSkKQEAgLTI1OTYsMjUgKzI1OTYsMjUgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnMKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwot
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0
KiByID0gKml0OworICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAg
Zm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQtPmdldCgpOwogICAgICAgICAvLyBP
bmx5IHBhaW50IHRoZSBvYmplY3QgaWYgb3VyIG1fc2hvdWxkUGFpbnQgZmxhZyBpcyBzZXQuCi0g
ICAgICAgIGlmIChyLT5zaG91bGRQYWludCgpICYmICFyLT5yZW5kZXJlcigpLT5oYXNTZWxmUGFp
bnRpbmdMYXllcigpKSB7CisgICAgICAgIGlmIChyLT5zaG91bGRQYWludCgpICYmICFyLT5yZW5k
ZXJlcigpLmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgICAgIFBhaW50SW5mbyBj
dXJyZW50UGFpbnRJbmZvKHBhaW50SW5mbyk7CiAgICAgICAgICAgICBjdXJyZW50UGFpbnRJbmZv
LnBoYXNlID0gcHJlc2VydmVQaGFzZSA/IHBhaW50SW5mby5waGFzZSA6IFBhaW50UGhhc2VCbG9j
a0JhY2tncm91bmQ7CiAgICAgICAgICAgICAvLyBGSVhNRTogTGF5b3V0UG9pbnQgdmVyc2lvbiBv
ZiB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbiB3b3VsZCBtYWtlIHRoaXMgbXVjaCBj
bGVhbmVyLgotICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGbG9hdEZv
cldyaXRpbmdNb2RlRm9yQ2hpbGQociwgTGF5b3V0UG9pbnQocGFpbnRPZmZzZXQueCgpICsgeFBv
c2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikgLSByLT5yZW5kZXJlcigpLT54KCksIHBh
aW50T2Zmc2V0LnkoKSArIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpIC0gci0+
cmVuZGVyZXIoKS0+eSgpKSk7Ci0gICAgICAgICAgICByLT5yZW5kZXJlcigpLT5wYWludChjdXJy
ZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsKKyAgICAgICAgICAgIExheW91dFBvaW50IGNoaWxk
UG9pbnQgPSBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZUZvckNoaWxkKHIsIExheW91dFBvaW50KHBh
aW50T2Zmc2V0LngoKSArIHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpIC0gci0+
cmVuZGVyZXIoKS54KCksIHBhaW50T2Zmc2V0LnkoKSArIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVk
aW5nTWFyZ2luKHIpIC0gci0+cmVuZGVyZXIoKS55KCkpKTsKKyAgICAgICAgICAgIHItPnJlbmRl
cmVyKCkucGFpbnQoY3VycmVudFBhaW50SW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgICAgICBp
ZiAoIXByZXNlcnZlUGhhc2UpIHsKICAgICAgICAgICAgICAgICBjdXJyZW50UGFpbnRJbmZvLnBo
YXNlID0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kczsKLSAgICAgICAgICAgICAgICBy
LT5yZW5kZXJlcigpLT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsKKyAgICAg
ICAgICAgICAgICByLT5yZW5kZXJlcigpLnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9p
bnQpOwogICAgICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNl
RmxvYXQ7Ci0gICAgICAgICAgICAgICAgci0+cmVuZGVyZXIoKS0+cGFpbnQoY3VycmVudFBhaW50
SW5mbywgY2hpbGRQb2ludCk7CisgICAgICAgICAgICAgICAgci0+cmVuZGVyZXIoKS5wYWludChj
dXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsKICAgICAgICAgICAgICAgICBjdXJyZW50UGFp
bnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZvcmVncm91bmQ7Ci0gICAgICAgICAgICAgICAgci0+
cmVuZGVyZXIoKS0+cGFpbnQoY3VycmVudFBhaW50SW5mbywgY2hpbGRQb2ludCk7CisgICAgICAg
ICAgICAgICAgci0+cmVuZGVyZXIoKS5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50
KTsKICAgICAgICAgICAgICAgICBjdXJyZW50UGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZU91
dGxpbmU7Ci0gICAgICAgICAgICAgICAgci0+cmVuZGVyZXIoKS0+cGFpbnQoY3VycmVudFBhaW50
SW5mbywgY2hpbGRQb2ludCk7CisgICAgICAgICAgICAgICAgci0+cmVuZGVyZXIoKS5wYWludChj
dXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTI4MjUsMTIgKzI4MjUsMTIgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVj
dGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHIKICAg
ICAgICAgICAgICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMocGFpbnRJbmZvLCBMYXlvdXRQ
b2ludChjYi0+eCgpLCBjYi0+eSgpKSwgY2ItPnBvc2l0aW9uZWRPYmplY3RzKCkpOyAvLyBGSVhN
RTogTm90IHJpZ2h0IGZvciBmbGlwcGVkIHdyaXRpbmcgbW9kZXMuCiAgICAgICAgIGlmIChtX2Zs
b2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
LSAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiByID0gKml0OworICAgICAgICAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiByID0gaXQtPmdldCgpOwogICAgICAgICAgICAgICAgIExheW91dFJlY3QgZmxvYXRC
b3gob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpICsgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRp
bmdNYXJnaW4ociksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRG
cm9tUm9vdEJsb2NrLmhlaWdodCgpICsgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4o
ciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5yZW5kZXJlcigpLT53
aWR0aCgpLCByLT5yZW5kZXJlcigpLT5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByLT5yZW5kZXJlcigpLndpZHRoKCksIHItPnJlbmRlcmVyKCkuaGVpZ2h0
KCkpOwogICAgICAgICAgICAgICAgIHJvb3RCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGZsb2F0
Qm94KTsKICAgICAgICAgICAgICAgICBmbG9hdEJveC5tb3ZlKHJvb3RCbG9ja1BoeXNpY2FsUG9z
aXRpb24ueCgpLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLnkoKSk7CiAgICAgICAgICAgICAg
ICAgcGFpbnRJbmZvLT5jb250ZXh0LT5jbGlwT3V0KHBpeGVsU25hcHBlZEludFJlY3QoZmxvYXRC
b3gpKTsKQEAgLTMyNjMsMTQgKzMyNjMsMTQgQEAgRmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2Nr
OjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiAgICAgZWxzZSB7CiAgICAgICAg
IC8vIERvbid0IGluc2VydCB0aGUgb2JqZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUg
bGlzdAogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2Jq
ZWN0SGFzaFRyYW5zbGF0b3I+KG8pOworICAgICAgICBhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RT
ZXQuZmluZDxSZW5kZXJCb3gmLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigqbyk7CiAg
ICAgICAgIGlmIChpdCAhPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKSkKLSAgICAgICAgICAgIHJl
dHVybiAqaXQ7CisgICAgICAgICAgICByZXR1cm4gaXQtPmdldCgpOwogICAgIH0KIAogICAgIC8v
IENyZWF0ZSB0aGUgc3BlY2lhbCBvYmplY3QgZW50cnkgJiBhcHBlbmQgaXQgdG8gdGhlIGxpc3QK
IAotICAgIE93blB0cjxGbG9hdGluZ09iamVjdD4gbmV3T2JqID0gRmxvYXRpbmdPYmplY3Q6OmNy
ZWF0ZShvKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRpbmdPYmplY3Q+IG9iamVjdCA9IEZs
b2F0aW5nT2JqZWN0OjpjcmVhdGUoKm8pOwogICAgIAogICAgIC8vIE91ciBsb2NhdGlvbiBpcyBp
cnJlbGV2YW50IGlmIHdlJ3JlIHVuc3BsaXR0YWJsZSBvciBubyBwYWdpbmF0aW9uIGlzIGluIGVm
ZmVjdC4KICAgICAvLyBKdXN0IGdvIGFoZWFkIGFuZCBsYXkgb3V0IHRoZSBmbG9hdC4KQEAgLTMy
ODYsMjMgKzMyODYsMjMgQEAgRmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjppbnNlcnRGbG9h
dGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiAgICAgICAgIG8tPmNvbXB1dGVBbmRTZXRCbG9ja0Rp
cmVjdGlvbk1hcmdpbnModGhpcyk7CiAgICAgfQogCi0gICAgbmV3T2JqLT5zZXRMb2dpY2FsV2lk
dGgobG9naWNhbFdpZHRoRm9yQ2hpbGQobykgKyBtYXJnaW5TdGFydEZvckNoaWxkKG8pICsgbWFy
Z2luRW5kRm9yQ2hpbGQobyksIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAgIG9iamVj
dC0+c2V0TG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aEZvckNoaWxkKG8pICsgbWFyZ2luU3RhcnRG
b3JDaGlsZChvKSArIG1hcmdpbkVuZEZvckNoaWxkKG8pLCBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGlmIChTaGFwZU91dHNpZGVJbmZv
KiBzaGFwZU91dHNpZGUgPSBvLT5zaGFwZU91dHNpZGVJbmZvKCkpCiAgICAgICAgIHNoYXBlT3V0
c2lkZS0+c2V0U2hhcGVTaXplKGxvZ2ljYWxXaWR0aEZvckNoaWxkKG8pLCBsb2dpY2FsSGVpZ2h0
Rm9yQ2hpbGQobykpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMtPmFk
ZChuZXdPYmoucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMtPmFkZChz
dGQ6Om1vdmUob2JqZWN0KSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5n
T2JqZWN0KFJlbmRlckJveCogbykKIHsKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKICAg
ICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0
ID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hU
cmFuc2xhdG9yPihvKTsKKyAgICAgICAgYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8
UmVuZGVyQm94JiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4oKm8pOwogICAgICAgICBp
ZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpIHsKLSAgICAgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiByID0gKml0OworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBpdC0+Z2V0
KCk7CiAgICAgICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAgICAgICAg
IExheW91dFVuaXQgbG9naWNhbFRvcCA9IHItPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSk7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gci0+
bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKQEAgLTMzMzgsMTggKzMz
MzgsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3RzQmVsb3coRmxv
YXRpbmdPYmplY3QqIGxhc3RGbG9hdCwgaW50IGxvZ2kKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKLSAgICBGbG9hdGluZ09iamVjdCogY3VyciA9IGZsb2F0aW5nT2Jq
ZWN0U2V0Lmxhc3QoKTsKKyAgICBGbG9hdGluZ09iamVjdCogY3VyciA9IGZsb2F0aW5nT2JqZWN0
U2V0Lmxhc3QoKS5nZXQoKTsKICAgICB3aGlsZSAoY3VyciAhPSBsYXN0RmxvYXQgJiYgKCFjdXJy
LT5pc1BsYWNlZCgpIHx8IGN1cnItPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkgPj0gbG9naWNhbE9mZnNldCkpIHsKICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92
ZShjdXJyKTsKICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjdXJyID0gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpOwor
ICAgICAgICBjdXJyID0gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpLmdldCgpOwogICAgIH0KIH0K
IAogTGF5b3V0UG9pbnQgUmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dpY2FsTG9jYXRpb25Gb3JGbG9h
dChjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QsIExheW91dFVuaXQgbG9naWNh
bFRvcE9mZnNldCkgY29uc3QKIHsKLSAgICBSZW5kZXJCb3gqIGNoaWxkQm94ID0gZmxvYXRpbmdP
YmplY3QtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94KiBjaGlsZEJveCA9ICZmbG9hdGluZ09i
amVjdC0+cmVuZGVyZXIoKTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gbG9n
aWNhbExlZnRPZmZzZXRGb3JDb250ZW50KGxvZ2ljYWxUb3BPZmZzZXQpOyAvLyBDb25zdGFudCBw
YXJ0IG9mIGxlZnQgb2Zmc2V0LgogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0OyAv
LyBDb25zdGFudCBwYXJ0IG9mIHJpZ2h0IG9mZnNldC4KICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
QEAgLTM0MzIsMTQgKzM0MzIsMTQgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9h
dHMoKQogICAgIC8vIE1vdmUgYmFja3dhcmRzIHRocm91Z2ggb3VyIGZsb2F0aW5nIG9iamVjdCBs
aXN0IHVudGlsIHdlIGZpbmQgYSBmbG9hdCB0aGF0IGhhcwogICAgIC8vIGFscmVhZHkgYmVlbiBw
b3NpdGlvbmVkLiAgVGhlbiB3ZSdsbCBiZSBhYmxlIHRvIG1vdmUgZm9yd2FyZCwgcG9zaXRpb25p
bmcgYWxsIG9mCiAgICAgLy8gdGhlIG5ldyBmbG9hdHMgdGhhdCBuZWVkIGl0LgotICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICBh
dXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgLS1pdDsgLy8gR28gdG8gbGFz
dCBpdGVtLgotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBmbG9hdGluZ09i
amVjdFNldC5iZWdpbigpOworICAgIGF1dG8gYmVnaW4gPSBmbG9hdGluZ09iamVjdFNldC5iZWdp
bigpOwogICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3QgPSAwOwog
ICAgIHdoaWxlIChpdCAhPSBiZWdpbikgewogICAgICAgICAtLWl0OwogICAgICAgICBpZiAoKCpp
dCktPmlzUGxhY2VkKCkpIHsKLSAgICAgICAgICAgIGxhc3RQbGFjZWRGbG9hdGluZ09iamVjdCA9
ICppdDsKKyAgICAgICAgICAgIGxhc3RQbGFjZWRGbG9hdGluZ09iamVjdCA9IGl0LT5nZXQoKTsK
ICAgICAgICAgICAgICsraXQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzQ1
MSwxNiArMzQ1MSwxNiBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAg
ICAgaWYgKGxhc3RQbGFjZWRGbG9hdGluZ09iamVjdCkKICAgICAgICAgbG9naWNhbFRvcCA9IG1h
eChsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSksIGxvZ2ljYWxUb3ApOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmVuZCgpOwogICAgIC8vIE5vdyB3YWxrIHRocm91Z2ggdGhlIHNldCBvZiB1bnBvc2l0
aW9uZWQgZmxvYXRzIGFuZCBwbGFjZSB0aGVtLgogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKml0OworICAgICAg
ICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7CiAgICAgICAgIC8v
IFRoZSBjb250YWluaW5nIGJsb2NrIGlzIHJlc3BvbnNpYmxlIGZvciBwb3NpdGlvbmluZyBmbG9h
dHMsIHNvIGlmIHdlIGhhdmUgZmxvYXRzIGluIG91cgogICAgICAgICAvLyBsaXN0IHRoYXQgY29t
ZSBmcm9tIHNvbWV3aGVyZSBlbHNlLCBkbyBub3QgYXR0ZW1wdCB0byBwb3NpdGlvbiB0aGVtLgot
ICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygp
ICE9IHRoaXMpCisgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5jb250YWlu
aW5nQmxvY2soKSAhPSB0aGlzKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgUmVu
ZGVyQm94KiBjaGlsZEJveCA9IGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpOworICAgICAgICBS
ZW5kZXJCb3gqIGNoaWxkQm94ID0gJmZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpOwogCiAgICAg
ICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsTGVmdE1hcmdpbiA9IHN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IG1hcmdpblN0YXJ0Rm9yQ2hpbGQoY2hpbGRCb3gpIDogbWFyZ2lu
RW5kRm9yQ2hpbGQoY2hpbGRCb3gpOwogCkBAIC0zNzQ0LDkgKzM3NDQsOSBAQCBMYXlvdXRVbml0
IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3coTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0KSBjbwogCiAgICAgTGF5b3V0VW5pdCBib3R0b20gPSBMYXlvdXRVbml0OjptYXgo
KTsKICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQg
PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CisgICAgYXV0byBlbmQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBp
dC0+Z2V0KCk7CiAgICAgICAgIExheW91dFVuaXQgZmxvYXRCb3R0b20gPSByLT5sb2dpY2FsQm90
dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwogICAgICAgICBpZiAoZmxvYXRCb3R0b20g
PiBsb2dpY2FsSGVpZ2h0KQogICAgICAgICAgICAgYm90dG9tID0gbWluKGZsb2F0Qm90dG9tLCBi
b3R0b20pOwpAQCAtMzc2MSw5ICszNzYxLDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG93
ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZsb2F0VHlwZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgTGF5b3V0VW5pdCBsb3dlc3RGbG9hdEJvdHRvbSA9IDA7CiAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxv
YXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OworICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmpl
Y3RTZXQuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQtPmdl
dCgpOwogICAgICAgICBpZiAoci0+aXNQbGFjZWQoKSAmJiByLT50eXBlKCkgJiBmbG9hdFR5cGUp
CiAgICAgICAgICAgICBsb3dlc3RGbG9hdEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdEJvdHRvbSwg
ci0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiAgICAgfQpAQCAt
MzgwMCwxNiArMzgwMCwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2lu
Z0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGJvb2wgbWFrZUNoaWxkUAogCiAgICAgLy8gRmxv
YXRzIHRoYXQgd2lsbCByZW1haW4gdGhlIGNoaWxkJ3MgcmVzcG9uc2liaWxpdHkgdG8gcGFpbnQg
c2hvdWxkIGZhY3RvciBpbnRvIGl0cwogICAgIC8vIG92ZXJmbG93LgotICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgY2hpbGRFbmQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgp
LmVuZCgpOwotICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBjaGlsZEl0ID0gY2hp
bGQtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5iZWdpbigpOyBjaGlsZEl0ICE9IGNoaWxkRW5k
OyArK2NoaWxkSXQpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqY2hpbGRJdDsKKyAg
ICBhdXRvIGNoaWxkRW5kID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5lbmQoKTsK
KyAgICBmb3IgKGF1dG8gY2hpbGRJdCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCku
YmVnaW4oKTsgY2hpbGRJdCAhPSBjaGlsZEVuZDsgKytjaGlsZEl0KSB7CisgICAgICAgIEZsb2F0
aW5nT2JqZWN0KiByID0gY2hpbGRJdC0+Z2V0KCk7CiAgICAgICAgIExheW91dFVuaXQgbG9naWNh
bEJvdHRvbUZvckZsb2F0ID0gbWluKHItPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSksIExheW91dFVuaXQ6Om1heCgpIC0gY2hpbGRMb2dpY2FsVG9wKTsKICAgICAgICAg
TGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gY2hpbGRMb2dpY2FsVG9wICsgbG9naWNhbEJvdHRv
bUZvckZsb2F0OwogICAgICAgICBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20gPSBtYXgobG93ZXN0
RmxvYXRMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKIAogICAgICAgICBpZiAobG9naWNh
bEJvdHRvbSA+IGxvZ2ljYWxIZWlnaHQoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVj
dCBpcyBub3QgaW4gdGhlIGxpc3QsIHdlIGFkZCBpdCBub3cuCi0gICAgICAgICAgICBpZiAoIWNv
bnRhaW5zRmxvYXQoci0+cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgICAgIGlmICghY29udGFpbnNG
bG9hdCgmci0+cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgICAgICBMYXlvdXRTaXplIG9mZnNl
dCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBMYXlvdXRTaXplKC1jaGlsZExvZ2ljYWxM
ZWZ0LCAtY2hpbGRMb2dpY2FsVG9wKSA6IExheW91dFNpemUoLWNoaWxkTG9naWNhbFRvcCwgLWNo
aWxkTG9naWNhbExlZnQpOwogICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkUGFpbnQgPSBmYWxz
ZTsKIApAQCAtMzgxNyw3ICszODE3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRkT3Zl
cmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIGNoaWxkLCBib29sIG1ha2VDaGlsZFAKICAgICAg
ICAgICAgICAgICAvLyBiZWhhdmVzIHByb3Blcmx5KS4gIFdlIGFsd2F5cyB3YW50IHRvIHByb3Bh
Z2F0ZSB0aGUgZGVzaXJlIHRvIHBhaW50IHRoZSBmbG9hdCBhcwogICAgICAgICAgICAgICAgIC8v
IGZhciBvdXQgYXMgd2UgY2FuLCB0byB0aGUgb3V0ZXJtb3N0IGJsb2NrIHRoYXQgb3ZlcmxhcHMg
dGhlIGZsb2F0LCBzdG9wcGluZyBvbmx5CiAgICAgICAgICAgICAgICAgLy8gaWYgd2UgaGl0IGEg
c2VsZi1wYWludGluZyBsYXllciBib3VuZGFyeS4KLSAgICAgICAgICAgICAgICBpZiAoci0+cmVu
ZGVyZXIoKS0+ZW5jbG9zaW5nRmxvYXRQYWludGluZ0xheWVyKCkgPT0gZW5jbG9zaW5nRmxvYXRQ
YWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoci0+cmVuZGVyZXIoKS5lbmNs
b3NpbmdGbG9hdFBhaW50aW5nTGF5ZXIoKSA9PSBlbmNsb3NpbmdGbG9hdFBhaW50aW5nTGF5ZXIo
KSkgewogICAgICAgICAgICAgICAgICAgICByLT5zZXRTaG91bGRQYWludChmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgICAgIHNob3VsZFBhaW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBA
IC0zODI4LDggKzM4MjgsOCBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2lu
Z0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGJvb2wgbWFrZUNoaWxkUAogICAgICAgICAgICAg
ICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoci0+Y29weVRvTmV3Q29udGFpbmVyKG9mZnNldCwg
c2hvdWxkUGFpbnQsIHRydWUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmIChtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzICYmICFyLT5zaG91bGRQYWlu
dCgpICYmICFyLT5yZW5kZXJlcigpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpCi0gICAgICAgICAg
ICAgICAgJiYgci0+cmVuZGVyZXIoKS0+aXNEZXNjZW5kYW50T2YoY2hpbGQpICYmIHItPnJlbmRl
cmVyKCktPmVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpID09IGNoaWxkLT5lbmNsb3NpbmdG
bG9hdFBhaW50aW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKG1ha2VDaGlsZFBhaW50T3Ro
ZXJGbG9hdHMgJiYgIXItPnNob3VsZFBhaW50KCkgJiYgIXItPnJlbmRlcmVyKCkuaGFzU2VsZlBh
aW50aW5nTGF5ZXIoKQorICAgICAgICAgICAgICAgICYmIHItPnJlbmRlcmVyKCkuaXNEZXNjZW5k
YW50T2YoY2hpbGQpICYmIHItPnJlbmRlcmVyKCkuZW5jbG9zaW5nRmxvYXRQYWludGluZ0xheWVy
KCkgPT0gY2hpbGQtPmVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gVGhlIGZsb2F0IGlzIG5vdCBvdmVyaGFuZ2luZyBmcm9tIHRoaXMgYmxvY2ssIHNv
IGlmIGl0IGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgY2hpbGQsIHRoZSBjaGlsZCBzaG91bGQKICAg
ICAgICAgICAgICAgICAvLyBwYWludCBpdCAodGhlIG90aGVyIGNhc2UgaXMgdGhhdCBpdCBpcyBp
bnRydWRpbmcgaW50byB0aGUgY2hpbGQpLCB1bmxlc3MgaXQgaGFzIGl0cyBvd24gbGF5ZXIgb3Ig
ZW5jbG9zaW5nCiAgICAgICAgICAgICAgICAgLy8gbGF5ZXIuCkBAIC0zODQxLDcgKzM4NDEsNyBA
QCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9j
ayogY2hpbGQsIGJvb2wgbWFrZUNoaWxkUAogICAgICAgICAgICAgLy8gU2luY2UgdGhlIGZsb2F0
IGRvZXNuJ3Qgb3ZlcmhhbmcsIGl0IGRpZG4ndCBnZXQgcHV0IGludG8gb3VyIGxpc3QuICBXZSBu
ZWVkIHRvIGdvIGFoZWFkIGFuZCBhZGQgaXRzIG92ZXJmbG93IGluIHRvIHRoZQogICAgICAgICAg
ICAgLy8gY2hpbGQgbm93LgogICAgICAgICAgICAgaWYgKHItPmlzRGVzY2VuZGFudCgpKQotICAg
ICAgICAgICAgICAgIGNoaWxkLT5hZGRPdmVyZmxvd0Zyb21DaGlsZChyLT5yZW5kZXJlcigpLCBM
YXlvdXRTaXplKHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpLCB5UG9zaXRpb25G
b3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSkpOworICAgICAgICAgICAgICAgIGNoaWxkLT5hZGRP
dmVyZmxvd0Zyb21DaGlsZCgmci0+cmVuZGVyZXIoKSwgTGF5b3V0U2l6ZSh4UG9zaXRpb25Gb3JG
bG9hdEluY2x1ZGluZ01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4o
cikpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbG93ZXN0RmxvYXRMb2dpY2FsQm90
dG9tOwpAQCAtMzg1Myw3ICszODUzLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzT3Zlcmhhbmdp
bmdGbG9hdChSZW5kZXJCb3gqIHJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRv
cj4ocmVuZGVyZXIpOworICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRl
ckJveCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpyZW5kZXJlcik7CiAgICAgaWYg
KGl0ID09IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTM4NzEsMTEgKzM4NzEsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxv
YXRzKFJlbmRlckJsb2NrKiBwcmV2LCBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2YKICAgICBsb2dp
Y2FsTGVmdE9mZnNldCArPSBtYXJnaW5Mb2dpY2FsTGVmdCgpOwogCiAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIHByZXZTZXQgPSBwcmV2LT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0g
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2RW5kID0gcHJldlNldC5lbmQoKTsKLSAg
ICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgcHJldkl0ID0gcHJldlNldC5iZWdpbigp
OyBwcmV2SXQgIT0gcHJldkVuZDsgKytwcmV2SXQpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3Qq
IHIgPSAqcHJldkl0OworICAgIGF1dG8gcHJldkVuZCA9IHByZXZTZXQuZW5kKCk7CisgICAgZm9y
IChhdXRvIHByZXZJdCA9IHByZXZTZXQuYmVnaW4oKTsgcHJldkl0ICE9IHByZXZFbmQ7ICsrcHJl
dkl0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gcHJldkl0LT5nZXQoKTsKICAgICAg
ICAgaWYgKHItPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgPiBsb2dp
Y2FsVG9wT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzIHx8ICFt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuY29udGFpbnMocikpIHsKKyAgICAgICAgICAgIGlmICgh
bV9mbG9hdGluZ09iamVjdHMgfHwgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5jb250YWluczxG
bG9hdGluZ09iamVjdCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpyKSkgewogICAg
ICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5
LgogICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZUZsb2F0aW5nT2JqZWN0cygpOwpAQCAtMzkwMyw3ICszOTAzLDcgQEAgYm9v
bCBSZW5kZXJCbG9jazo6YXZvaWRzRmxvYXRzKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCbG9jazo6
Y29udGFpbnNGbG9hdChSZW5kZXJCb3gqIHJlbmRlcmVyKSBjb25zdAogewotICAgIHJldHVybiBt
X2Zsb2F0aW5nT2JqZWN0cyAmJiBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuY29udGFpbnM8UmVu
ZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4ocmVuZGVyZXIpOworICAgIHJl
dHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuY29udGFp
bnM8UmVuZGVyQm94JiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4oKnJlbmRlcmVyKTsK
IH0KIAogdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0Zvckxh
eW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUsIGJvb2wgaW5MYXlvdXQpCkBAIC0zOTM1LDE1
ICszOTM1LDE1IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtTaWJsaW5nc1dpdGhGbG9hdHNGb3JM
YXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlKQogICAgICAgICByZXR1cm47CiAKICAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKKyAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgp
OwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIG5leHQgPSBuZXh0U2libGluZygpOyBuZXh0OyBu
ZXh0ID0gbmV4dC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIW5leHQtPmlzUmVuZGVy
QmxvY2soKSB8fCBuZXh0LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgdG9S
ZW5kZXJCbG9jayhuZXh0KS0+YXZvaWRzRmxvYXRzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICBSZW5kZXJCbG9jayogbmV4dEJsb2NrID0gdG9SZW5kZXJCbG9jayhuZXh0KTsK
LSAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gq
IGZsb2F0aW5nQm94ID0gKCppdCktPnJlbmRlcmVyKCk7CisgICAgICAgIGZvciAoYXV0byBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgUmVuZGVyQm94KiBmbG9hdGluZ0JveCA9ICYoKml0KS0+cmVuZGVyZXIoKTsKICAgICAgICAg
ICAgIGlmIChmbG9hdFRvUmVtb3ZlICYmIGZsb2F0aW5nQm94ICE9IGZsb2F0VG9SZW1vdmUpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAobmV4dEJsb2NrLT5jb250
YWluc0Zsb2F0KGZsb2F0aW5nQm94KSkKQEAgLTM5ODMsNyArMzk4Myw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnVwZGF0ZUxvY2FsRmxvYXRpbmdPYmplY3RzRm9yUGFpbnRpbmdDb250YWluZXIoUmVu
ZGVyQm94KiBmbG9hCiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKICAgICBpZiAoIW1fZmxv
YXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdGVyYXRvciA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5maW5kPFJlbmRlckJveCos
IEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KGZsb2F0VG9VcGRhdGUpOworICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuZmluZDxSZW5kZXJCb3gmLCBGbG9h
dGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigqZmxvYXRUb1VwZGF0ZSk7CiAgICAgaWYgKGl0ZXJh
dG9yICE9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5lbmQoKSkgewogICAgICAgICBib29sIHNo
b3VsZFBhaW50ID0gIWZvdW5kUGFpbnRDb250YWluZXIgJiYgIWZsb2F0VG9VcGRhdGUtPmhhc1Nl
bGZQYWludGluZ0xheWVyKCkgJiYgZmxvYXRUb1VwZGF0ZS0+ZW5jbG9zaW5nRmxvYXRQYWludGlu
Z0xheWVyKCkgPT0gZW5jbG9zaW5nRmxvYXRQYWludGluZ0xheWVyKCk7CiAgICAgICAgIGZvdW5k
UGFpbnRDb250YWluZXIgfD0gc2hvdWxkUGFpbnQ7CkBAIC00MTc3LDE1ICs0MTc3LDE1IEBAIGJv
b2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAgICAgICAgIGFkanVzdGVkTG9jYXRpb24gKz0gdG9MYXlv
dXRTaXplKHRvUmVuZGVyVmlldygqdGhpcykuZnJhbWVWaWV3KCkuc2Nyb2xsUG9zaXRpb24oKSk7
CiAKICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdp
biA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7IGl0ICE9IGJlZ2luOykgewor
ICAgIGF1dG8gYmVnaW4gPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOworICAgIGZvciAoYXV0
byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOyBpdCAhPSBiZWdpbjspIHsKICAgICAgICAg
LS1pdDsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKml0OwotICAg
ICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPnNob3VsZFBhaW50KCkgJiYgIWZsb2F0aW5nT2JqZWN0
LT5yZW5kZXJlcigpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7Ci0gICAgICAgICAgICBMYXlv
dXRVbml0IHhPZmZzZXQgPSB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihmbG9hdGlu
Z09iamVjdCkgLSBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS0+eCgpOwotICAgICAgICAgICAg
TGF5b3V0VW5pdCB5T2Zmc2V0ID0geVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oZmxv
YXRpbmdPYmplY3QpIC0gZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCktPnkoKTsKKyAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gaXQtPmdldCgpOworICAgICAgICBpZiAo
ZmxvYXRpbmdPYmplY3QtPnNob3VsZFBhaW50KCkgJiYgIWZsb2F0aW5nT2JqZWN0LT5yZW5kZXJl
cigpLmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgICAgIExheW91dFVuaXQgeE9m
ZnNldCA9IHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGZsb2F0aW5nT2JqZWN0KSAt
IGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLngoKTsKKyAgICAgICAgICAgIExheW91dFVuaXQg
eU9mZnNldCA9IHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGZsb2F0aW5nT2JqZWN0
KSAtIGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLnkoKTsKICAgICAgICAgICAgIExheW91dFBv
aW50IGNoaWxkUG9pbnQgPSBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZUZvckNoaWxkKGZsb2F0aW5n
T2JqZWN0LCBhZGp1c3RlZExvY2F0aW9uICsgTGF5b3V0U2l6ZSh4T2Zmc2V0LCB5T2Zmc2V0KSk7
Ci0gICAgICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCktPmhpdFRlc3QocmVx
dWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBjaGlsZFBvaW50KSkgeworICAgICAg
ICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLmhpdFRlc3QocmVxdWVzdCwgcmVz
dWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBjaGlsZFBvaW50KSkgewogICAgICAgICAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkg
LSB0b0xheW91dFNpemUoY2hpbGRQb2ludCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgfQpAQCAtNjExMCwxMyArNjExMCwxMyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjphZGp1c3RGb3JCb3JkZXJGaXQoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0JiBsZWZ0LCBMYXlv
dXRVbml0JgogICAgICAgICAKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAg
ICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICAgICAgZm9yIChGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7
CisgICAgICAgICAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAg
ICAgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBpdC0+Z2V0KCk7
CiAgICAgICAgICAgICAgICAgLy8gT25seSBleGFtaW5lIHRoZSBvYmplY3QgaWYgb3VyIG1fc2hv
dWxkUGFpbnQgZmxhZyBpcyBzZXQuCiAgICAgICAgICAgICAgICAgaWYgKHItPnNob3VsZFBhaW50
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBmbG9hdExlZnQgPSB4UG9zaXRp
b25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPnJlbmRlcmVyKCktPngoKTsKLSAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBmbG9hdFJpZ2h0ID0gZmxvYXRMZWZ0ICsgci0+cmVu
ZGVyZXIoKS0+d2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBmbG9hdExl
ZnQgPSB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPnJlbmRlcmVyKCku
eCgpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGZsb2F0UmlnaHQgPSBmbG9hdExl
ZnQgKyByLT5yZW5kZXJlcigpLndpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBt
aW4obGVmdCwgZmxvYXRMZWZ0KTsKICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmln
aHQsIGZsb2F0UmlnaHQpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgKaW5kZXggOThhZDNmYWNiMjg4MGYwNWQ2NGU4YjUzNjFmYTc3ODkwY2I4
NGQwMC4uYjdjYmQ5YWQzOGQzYjA5MmE1YzAyNGI3M2FmZThkNWVjYzM1NWMwOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTYxNywxNyArNjE3LDE3IEBAIHByaXZh
dGU6CiAgICAgTGF5b3V0VW5pdCB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjb25z
dCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBjaGlsZC0+eCgpICsgY2hp
bGQtPnJlbmRlcmVyKCktPm1hcmdpbkxlZnQoKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZC0+
eCgpICsgY2hpbGQtPnJlbmRlcmVyKCkubWFyZ2luTGVmdCgpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXR1cm4gY2hpbGQtPngoKSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkLT5y
ZW5kZXJlcigpKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZC0+eCgpICsgbWFyZ2luQmVmb3Jl
Rm9yQ2hpbGQoJmNoaWxkLT5yZW5kZXJlcigpKTsKICAgICB9CiAgICAgICAgIAogICAgIExheW91
dFVuaXQgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY29uc3QgRmxvYXRpbmdPYmpl
Y3QqIGNoaWxkKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gY2hpbGQtPnkoKSArIG1hcmdpbkJlZm9yZUZvckNo
aWxkKGNoaWxkLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZC0+eSgpICsg
bWFyZ2luQmVmb3JlRm9yQ2hpbGQoJmNoaWxkLT5yZW5kZXJlcigpKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT55KCkgKyBjaGlsZC0+cmVuZGVyZXIoKS0+bWFyZ2lu
VG9wKCk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQtPnkoKSArIGNoaWxkLT5yZW5kZXJlcigp
Lm1hcmdpblRvcCgpOwogICAgIH0KIAogICAgIExheW91dFBvaW50IGNvbXB1dGVMb2dpY2FsTG9j
YXRpb25Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCosIExheW91dFVuaXQgbG9naWNhbFRv
cE9mZnNldCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuY3BwCmluZGV4IDA4MDJhMzFhMjRhZjc1NmNkZDc1N2Y1ZDIzMjVhMzNiNTM5YzA0N2YuLjE4
YjlmY2FmNjFkNDYwOWZiMDJlNjI1ZGJlMWJkMDU4ZTUwMmJiMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC05MiwxMSArOTIsMTEgQEAgdm9p
ZCBSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRzKCkKICAgICBIYXNoU2V0PFJlbmRlckJveCo+
IG9sZEludHJ1ZGluZ0Zsb2F0U2V0OwogICAgIGlmICghY2hpbGRyZW5JbmxpbmUoKSAmJiBtX2Zs
b2F0aW5nT2JqZWN0cykgewogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAg
IGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZs
b2F0aW5nT2JqZWN0ID0gKml0OworICAgICAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmVuZCgpOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGlu
Z09iamVjdCA9IGl0LT5nZXQoKTsKICAgICAgICAgICAgIGlmICghZmxvYXRpbmdPYmplY3QtPmlz
RGVzY2VuZGFudCgpKQotICAgICAgICAgICAgICAgIG9sZEludHJ1ZGluZ0Zsb2F0U2V0LmFkZChm
bG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgb2xkSW50cnVkaW5n
RmxvYXRTZXQuYWRkKCZmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTE2MCwxMCArMTYwLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpjbGVhckZs
b2F0cygpCiAgICAgICAgIExheW91dFVuaXQgY2hhbmdlTG9naWNhbEJvdHRvbSA9IExheW91dFVu
aXQ6Om1pbigpOwogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAgICAgICAg
IGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5k
ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKLSAgICAg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogb2xkRmxvYXRpbmdPYmplY3QgPSBmbG9hdE1hcC5n
ZXQoZi0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmVuZCgpOworICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIGYgPSBpdC0+Z2V0KCk7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEZsb2F0
aW5nT2JqZWN0PiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFwLnRha2UoJmYtPnJlbmRlcmVy
KCkpOwogICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGYtPmxvZ2lj
YWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KG9sZEZsb2F0aW5nT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xk
TG9naWNhbEJvdHRvbSA9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpOwpAQCAtMTgzLDEyICsxODMsMTAgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmNsZWFyRmxvYXRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGZsb2F0TWFwLnJlbW92ZShmLT5y
ZW5kZXJlcigpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZEZsb2F0aW5nT2JqZWN0LT5v
cmlnaW5hdGluZ0xpbmUoKSAmJiAhc2VsZk5lZWRzTGF5b3V0KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCgmb2xkRmxvYXRpbmdPYmplY3QtPm9yaWdpbmF0aW5nTGluZSgpLT5y
ZW5kZXJlcigpID09IHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgb2xkRmxvYXRpbmdP
YmplY3QtPm9yaWdpbmF0aW5nTGluZSgpLT5tYXJrRGlydHkoKTsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2xkRmxvYXRpbmdPYmplY3Q7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRv
cCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hh
bmdlTG9naWNhbEJvdHRvbSwgbG9naWNhbEJvdHRvbSk7CkBAIC0xOTYsMTUgKzE5NCwxNCBAQCB2
b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9hdHMoKQogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKLSAgICAgICAgUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6aXRlcmF0b3IgZW5kID0gZmxv
YXRNYXAuZW5kKCk7Ci0gICAgICAgIGZvciAoUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDo6aXRlcmF0
b3IgaXQgPSBmbG9hdE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICgqaXQpLnZhbHVlOworICAgICAgICBh
dXRvIGVuZCA9IGZsb2F0TWFwLmVuZCgpOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdE1h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBmbG9hdGluZ09iamVjdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmICghZmxv
YXRpbmdPYmplY3QtPmlzRGVzY2VuZGFudCgpKSB7CiAgICAgICAgICAgICAgICAgY2hhbmdlTG9n
aWNhbFRvcCA9IDA7CiAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChj
aGFuZ2VMb2dpY2FsQm90dG9tLCBmbG9hdGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
ZGVsZXRlQWxsVmFsdWVzKGZsb2F0TWFwKTsKIAogICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxv
Y2tSYW5nZShjaGFuZ2VMb2dpY2FsVG9wLCBjaGFuZ2VMb2dpY2FsQm90dG9tKTsKICAgICB9IGVs
c2UgaWYgKCFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpIHsKQEAgLTIxNCw5ICsyMTEs
OSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9hdHMoKQogICAgICAgICAgICAgbWFy
a0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBp
dCAhPSBlbmQgJiYgIW9sZEludHJ1ZGluZ0Zsb2F0U2V0LmlzRW1wdHkoKTsgKytpdCkKLSAgICAg
ICAgICAgICAgICBvbGRJbnRydWRpbmdGbG9hdFNldC5yZW1vdmUoKCppdCktPnJlbmRlcmVyKCkp
OworICAgICAgICAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAg
ICAgICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVu
ZCAmJiAhb2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpOyArK2l0KQorICAgICAgICAgICAg
ICAgIG9sZEludHJ1ZGluZ0Zsb2F0U2V0LnJlbW92ZSgmKCppdCktPnJlbmRlcmVyKCkpOwogICAg
ICAgICAgICAgaWYgKCFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICAgICAgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCmluZGV4IDI5NGVhODgyNDRmNTA2MWZhZDIwMzk5YWRmMzE1YWEzYmNiZjcxNjMuLmZhZTky
NDQxMGZkNWRjZWM1ZjQyMTRkNTYxNDFjMmUyNTA3YzVlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC0xMDcyLDcgKzEw
NzIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUo
RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQogewogICAgIEFTU0VSVCghZmxvYXRpbmdP
YmplY3QtPm9yaWdpbmF0aW5nTGluZSgpKTsKICAgICBmbG9hdGluZ09iamVjdC0+c2V0T3JpZ2lu
YXRpbmdMaW5lKGxhc3RSb290Qm94KCkpOwotICAgIGxhc3RSb290Qm94KCktPmFwcGVuZEZsb2F0
KGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKTsKKyAgICBsYXN0Um9vdEJveCgpLT5hcHBlbmRG
bG9hdCgmZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkpOwogfQogCiAvLyBGSVhNRTogVGhpcyBz
aG91bGQgYmUgYSBCaWRpU3RhdHVzIGNvbnN0cnVjdG9yIG9yIGNyZWF0ZSBtZXRob2QuCkBAIC0x
MjgwLDcgKzEyODAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzKExp
bmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGFzSW5saQogICAgIH0KIAogICAgIGlm
IChjb250YWluc0Zsb2F0cygpKQotICAgICAgICBsYXlvdXRTdGF0ZS5zZXRMYXN0RmxvYXQobV9m
bG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSk7CisgICAgICAgIGxheW91dFN0YXRlLnNldExh
c3RGbG9hdChtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgpLmdldCgpKTsKIAogICAgIC8v
IFdlIGFsc28gZmluZCB0aGUgZmlyc3QgY2xlYW4gbGluZSBhbmQgZXh0cmFjdCB0aGVzZSBsaW5l
cy4gIFdlIHdpbGwgYWRkIHRoZW0gYmFjawogICAgIC8vIGlmIHdlIGRldGVybWluZSB0aGF0IHdl
J3JlIGFibGUgdG8gc3luY2hyb25pemUgYWZ0ZXIgaGFuZGxpbmcgYWxsIG91ciBkaXJ0eSBsaW5l
cy4KQEAgLTE1MzgsNyArMTUzOCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRG
bG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluCiAKICAgICAg
ICAgY29uc3QgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5kOwogICAgICAgICBib29sIGlzTmV3
VUJBUGFyYWdyYXBoID0gbGF5b3V0U3RhdGUubGluZUluZm8oKS5wcmV2aW91c0xpbmVCcm9rZUNs
ZWFubHkoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUgPSAoY29udGFpbnNGbG9hdHMoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgp
IDogMDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUg
PSAoY29udGFpbnNGbG9hdHMoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgpLmdl
dCgpIDogMDsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICB1cGRhdGVTaGFwZUFu
ZFNlZ21lbnRzRm9yQ3VycmVudExpbmUoc2hhcGVJbnNpZGVJbmZvLCBsb2dpY2FsT2Zmc2V0RnJv
bVNoYXBlQ29udGFpbmVyLCBsYXlvdXRTdGF0ZSk7CkBAIC0xNjM4LDI0ICsxNjM4LDI0IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0
ZSYgbGF5b3V0U3RhdGUsIElubGluCiAKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzICYm
IGxhc3RSb290Qm94KCkpIHsKICAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBm
bG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OwotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKKyAgICAgICAgICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5i
ZWdpbigpOworICAgICAgICAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
ICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5sYXN0RmxvYXQoKSkgewotICAgICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgbGFzdEZsb2F0SXRlcmF0b3IgPSBmbG9hdGlu
Z09iamVjdFNldC5maW5kKGxheW91dFN0YXRlLmxhc3RGbG9hdCgpKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxGbG9hdGlu
Z09iamVjdCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpsYXlvdXRTdGF0ZS5sYXN0
RmxvYXQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGxhc3RGbG9hdEl0ZXJhdG9yICE9IGVu
ZCk7CiAgICAgICAgICAgICAgICAgKytsYXN0RmxvYXRJdGVyYXRvcjsKICAgICAgICAgICAgICAg
ICBpdCA9IGxhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
ID0gKml0OworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gaXQtPmdldCgpOwog
ICAgICAgICAgICAgICAgIGFwcGVuZEZsb2F0aW5nT2JqZWN0VG9MYXN0TGluZShmKTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoZi0+cmVuZGVyZXIoKSA9PSBsYXlvdXRTdGF0ZS5mbG9hdHMoKVts
YXlvdXRTdGF0ZS5mbG9hdEluZGV4KCldLm9iamVjdCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCZmLT5yZW5kZXJlcigpID09IGxheW91dFN0YXRlLmZsb2F0cygpW2xheW91dFN0YXRlLmZsb2F0
SW5kZXgoKV0ub2JqZWN0KTsKICAgICAgICAgICAgICAgICAvLyBJZiBhIGZsb2F0J3MgZ2VvbWV0
cnkgaGFzIGNoYW5nZWQsIGdpdmUgdXAgb24gc3luY2luZyB3aXRoIGNsZWFuIGxpbmVzLgogICAg
ICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5mbG9hdHMoKVtsYXlvdXRTdGF0ZS5mbG9hdElu
ZGV4KCldLnJlY3QgIT0gZi0+ZnJhbWVSZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIGNoZWNr
Rm9yRW5kTGluZU1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUuc2V0
RmxvYXRJbmRleChsYXlvdXRTdGF0ZS5mbG9hdEluZGV4KCkgKyAxKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGxheW91dFN0YXRlLnNldExhc3RGbG9hdCghZmxvYXRpbmdPYmplY3RTZXQu
aXNFbXB0eSgpID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpIDogMCk7CisgICAgICAgICAgICBs
YXlvdXRTdGF0ZS5zZXRMYXN0RmxvYXQoIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSA/IGZs
b2F0aW5nT2JqZWN0U2V0Lmxhc3QoKS5nZXQoKSA6IG51bGxwdHIpOwogICAgICAgICB9CiAKICAg
ICAgICAgbGluZU1pZHBvaW50U3RhdGUucmVzZXQoKTsKQEAgLTE3ODMsMTcgKzE3ODMsMTcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGlua1RvRW5kTGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYg
bGF5b3V0U3RhdGUpCiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OwotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmVuZCgpOworICAgICAgICBhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsK
KyAgICAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgaWYg
KGxheW91dFN0YXRlLmxhc3RGbG9hdCgpKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZChsYXlv
dXRTdGF0ZS5sYXN0RmxvYXQoKSk7CisgICAgICAgICAgICBhdXRvIGxhc3RGbG9hdEl0ZXJhdG9y
ID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxGbG9hdGluZ09iamVjdCYsIEZsb2F0aW5nT2JqZWN0
SGFzaFRyYW5zbGF0b3I+KCpsYXlvdXRTdGF0ZS5sYXN0RmxvYXQoKSk7CiAgICAgICAgICAgICBB
U1NFUlQobGFzdEZsb2F0SXRlcmF0b3IgIT0gZW5kKTsKICAgICAgICAgICAgICsrbGFzdEZsb2F0
SXRlcmF0b3I7CiAgICAgICAgICAgICBpdCA9IGxhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAgICB9
CiAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBhcHBlbmRGbG9h
dGluZ09iamVjdFRvTGFzdExpbmUoKml0KTsKLSAgICAgICAgbGF5b3V0U3RhdGUuc2V0TGFzdEZs
b2F0KCFmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkgPyBmbG9hdGluZ09iamVjdFNldC5sYXN0
KCkgOiAwKTsKKyAgICAgICAgICAgIGFwcGVuZEZsb2F0aW5nT2JqZWN0VG9MYXN0TGluZShpdC0+
Z2V0KCkpOworICAgICAgICBsYXlvdXRTdGF0ZS5zZXRMYXN0RmxvYXQoIWZsb2F0aW5nT2JqZWN0
U2V0LmlzRW1wdHkoKSA/IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKS5nZXQoKSA6IG51bGxwdHIp
OwogICAgIH0KIH0KIApAQCAtMjEzOSw5ICsyMTM5LDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6Y2hl
Y2tQYWdpbmF0aW9uQW5kRmxvYXRzQXRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBsYXN0TGluZS0+bGluZUJvdHRvbVdp
dGhMZWFkaW5nKCkgKyBhYnNvbHV0ZVZhbHVlKGxpbmVEZWx0YSk7CiAKICAgICBjb25zdCBGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNl
dC5lbmQoKTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGlu
Z09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRmxvYXRpbmdP
YmplY3QqIGYgPSAqaXQ7CisgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
KyAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBpdC0+Z2V0KCk7CiAgICAgICAg
IGlmIChmLT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID49IGxvZ2lj
YWxUb3AgJiYgZi0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSA8IGxv
Z2ljYWxCb3R0b20pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzQwMyw3
ICszNDAzLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9h
dGluZ09iamVjdCogbmV3RmxvYXQsIEZsb2F0aW5nT2JqZWMKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3Qo
KSA9PSBuZXdGbG9hdCk7CisgICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKS5nZXQo
KSA9PSBuZXdGbG9hdCk7CiAKICAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbFRvcCA9IG5ld0Zs
b2F0LT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwogICAgIGludCBwYWdp
bmF0aW9uU3RydXQgPSBuZXdGbG9hdC0+cGFnaW5hdGlvblN0cnV0KCk7CkBAIC0zNDExLDE3ICsz
NDExLDE3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRp
bmdPYmplY3QqIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjCiAgICAgaWYgKGZsb2F0TG9naWNhbFRv
cCAtIHBhZ2luYXRpb25TdHJ1dCAhPSBsb2dpY2FsSGVpZ2h0KCkgKyBsaW5lSW5mby5mbG9hdFBh
Z2luYXRpb25TdHJ1dCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICBhdXRvIGl0
ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgLS1pdDsgLy8gTGFzdCBmbG9hdCBpcyBu
ZXdGbG9hdCwgc2tpcCB0aGF0IG9uZS4KLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJl
Z2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKKyAgICBhdXRvIGJlZ2luID0gZmxvYXRp
bmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICB3aGlsZSAoaXQgIT0gYmVnaW4pIHsKICAgICAgICAg
LS1pdDsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiBmID0gaXQtPmdldCgpOwogICAgICAgICBpZiAoZiA9PSBsYXN0RmxvYXRGcm9tUHJl
dmlvdXNMaW5lKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChmLT5sb2dpY2FsVG9w
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID09IGxvZ2ljYWxIZWlnaHQoKSArIGxpbmVJbmZv
LmZsb2F0UGFnaW5hdGlvblN0cnV0KCkpIHsKICAgICAgICAgICAgIGYtPnNldFBhZ2luYXRpb25T
dHJ1dChwYWdpbmF0aW9uU3RydXQgKyBmLT5wYWdpbmF0aW9uU3RydXQoKSk7Ci0gICAgICAgICAg
ICBSZW5kZXJCb3gqIG8gPSBmLT5yZW5kZXJlcigpOworICAgICAgICAgICAgUmVuZGVyQm94KiBv
ID0gJmYtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQobywg
bG9naWNhbFRvcEZvckNoaWxkKG8pICsgbWFyZ2luQmVmb3JlRm9yQ2hpbGQobykgKyBwYWdpbmF0
aW9uU3RydXQpOwogICAgICAgICAgICAgaWYgKG8tPmlzUmVuZGVyQmxvY2soKSkKICAgICAgICAg
ICAgICAgICB0b1JlbmRlckJsb2NrKG8pLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIE1hcmtP
bmx5VGhpcyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212427</attachid>
            <date>2013-09-23 22:40:29 -0700</date>
            <delta_ts>2013-09-23 22:47:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121823-20130923224028.patch</filename>
            <type>text/plain</type>
            <size>61211</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2MzE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWM0ODliOTAyZGZkYjcx
YjA5ODljNzY3YjQ3MGJlMDVhYjRkOGFkNC4uMjkxZmJjNGNjMDU2MmZjZWVlZGI3MjBkZWQ1OTUw
NDY3MzYwZDg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDEzLTA5LTIzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgdW5pcXVlX3B0ciBpbnN0
ZWFkIG9mIGRlbGV0ZUFsbFZhbHVlcyBpbiBGbG9hdGluZ09iamVjdCBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE4MjMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmluZy9GbG9hdGlu
Z09iamVjdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmNyZWF0ZSk6
IFJldHVybiBhIHVuaXF1ZV9wdHIgaW5zdGVhZCBvZiBQYXNzT3duUHRyLgorICAgICAgICBVc2Ug
YXV0byBhbmQgYSB3b3JkIGZvciB0aGUgbG9jYWwgdmFyaWFibGUgaW5zdGVhZCBvZiBhbiBhYmJy
ZXZpYXRpb24uIEFsc28KKyAgICAgICAgY2hhbmdlZCB0byB0YWtlIGEgcmVmZXJlbmNlIGluc3Rl
YWQgb2YgYSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmNvcHlU
b05ld0NvbnRhaW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6
OnVuc2FmZUNsb25lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6
On5GbG9hdGluZ09iamVjdHMpOiBSZW1vdmVkIGNhbGwgdG8gZGVsZXRlQWxsVmFsdWVzLgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpjbGVhckxpbmVCb3hUcmVlUG9pbnRlcnMp
OiBVc2UgYXV0byB0byBtYWtlIHRoaXMKKyAgICAgICAgcmVhZCBjbGVhcmx5LgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpjbGVhcik6IFJlbW92ZWQgY2FsbCB0byBkZWxldGVB
bGxWYWx1ZXMuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6Om1vdmVBbGxUb0Zs
b2F0SW5mb01hcCk6IFVzZSBzdGQ6Om1vdmUgdG8gbW92ZSB2YWx1ZXMKKyAgICAgICAgb3V0IG9m
IHRoZSBzZXQsIGludG8gdGhlIG1hcC4gUmVtb3ZlZCBjb2RlIHRvIGNsZWFyIHRoZSBzZXQsIHNp
bmNlIGl0IHdhcyBhCisgICAgICAgIHRyaWNrIHRvIHByZXZlbnQgdGhlIHZhbHVlcyBmcm9tIGJl
aW5nIGRlbGV0ZWQgd2hlbiB0aGV5IHdlcmUgbm90IG1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6
RmxvYXRpbmdPYmplY3RzOjphZGQpOiBDaGFuZ2VkIHRvIHRha2UgYSB1bmlxdWVfcHRyIGFuZCB0
byBtb3ZlIHRoZQorICAgICAgICBwb2ludGVyIGludG8gdGhlIHNldCBpbnN0ZWFkIG9mIHVzaW5n
IGxlYWtQdHIuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZSk6IFJl
YXJyYW5nZWQgY29kZSBzbyB0aGF0IHRoZSByZW1vdmUgaXMgYXQKKyAgICAgICAgdGhlIGVuZCBv
ZiB0aGUgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGJlZ2lubmluZy4gQWxzbyBoYWQgdG8gdXNl
IGEgaGFzaAorICAgICAgICB0cmFuc2xhdG9yIGFuZCBhIGZpbmQvcmVtb3ZlIGNvbWJvIHNpbmNl
IHdlIGRvbid0IGhhdmUgaGFzaCB0cmFuc2xhdG9yIHZlcnNpb24KKyAgICAgICAgb2YgdGhlIHJl
bW92ZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHV0
ZVBsYWNlZEZsb2F0c1RyZWUpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIHRoZSB0
eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6cGxhY2VkRmxvYXRzVHJl
ZSk6IE1vdmVkIHRoaXMgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkCisgICAgICAgIG9mIGhhdmluZyBp
dCBpbiB0aGUgaGVhZGVyLCBzaW5jZSBpdCdzIG9ubHkgdXNlZCB3aXRoaW4gdGhlIGZpbGUuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmg6IENoYW5nZWQgZnVuY3Rpb25z
IHRvIHRha2UgcmVmZXJlbmNlcyBpbnN0ZWFkCisgICAgICAgIG9mIHBvaW50ZXJzIGFuZCByZXR1
cm4gdW5pcXVlX3B0ciBpbnN0ZWFkIG9mIFBhc3NPd25QdHIuIEFsc28gbWFkZQorICAgICAgICBj
b25zdHJ1Y3RvcnMgcHVibGljIHNvIHdlIGNhbiB1c2UgdGhlbSB3aXRoIG1ha2VfdW5pcXVlLiBD
aGFuZ2VkIHR5cGVzIHRvCisgICAgICAgIHVzZSB1bmlxdWVfcHRyIGluc3RlYWQgb2YgcmF3IHBv
aW50ZXJzLCBhbmQgbWFkZSB0aGUgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcgorICAgICAg
ICB3b3JrIGZvciBib3RoIFJlbmRlckJveCYgYW5kIEZsb2F0aW5nT2JqZWN0Ji4KKworICAgICAg
ICAqIHJlbmRlcmluZy9MaW5lV2lkdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRo
OjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICBVcGRh
dGVkIGZvciBjaGFuZ2VzIHRvIHR5cGVzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bW92ZUFsbENoaWxkcmVuSW5jbHVkaW5n
RmxvYXRzVG8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJv
bUZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5n
aW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpjb250YWluc0Zsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxvYXRzRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjp1cGRhdGVMb2NhbEZsb2F0aW5nT2JqZWN0c0ZvclBhaW50aW5nQ29u
dGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQpOgorICAg
ICAgICBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvIHR5cGVzLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6
OmNsZWFyRmxvYXRzKTogVXBkYXRlZCB0byB1c2UgdGFrZSBpbnN0ZWFkIG9mCisgICAgICAgIGEg
Y29tYmluYXRpb24gb2YgcmVtb3ZlIGFuZCBkZWxldGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpsYXlvdXRSdW5zQW5kRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
YXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGlua1RvRW5kTGluZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpjaGVja1BhZ2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUpOgorICAgICAgICBVcGRhdGVkIGZv
ciBjaGFuZ2VzIHRvIHR5cGVzLgorCiAyMDEzLTA5LTIzICBHdXJwcmVldCBLYXVyICA8ay5ndXJw
cmVldEBzYW1zdW5nLmNvbT4KIAogICAgICAgICBDU1MgVW5pdCB2aCwgdncsIHZtaW4gYW5kIHZt
YXggaW4gYm94LXNoYWRvdyBhcmUgbm90IGFwcGxpZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9GbG9hdGluZ09iamVjdHMuY3BwCmluZGV4IGEzZjgyMDhhYWEzM2Q2ODJhODZkZGYwZTY0
ZWJmNDFmNGY4Y2M2OGMuLmEwOWIyZTc2YjExNTA4ZmUwYzFlOTE3NzhhNWQzMDk0YzI2MDJiNTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCkBAIC00
Miw5ICs0Miw5IEBAIHN0cnVjdCBTYW1lU2l6ZUFzRmxvYXRpbmdPYmplY3QgewogCiBDT01QSUxF
X0FTU0VSVChzaXplb2YoRmxvYXRpbmdPYmplY3QpID09IHNpemVvZihTYW1lU2l6ZUFzRmxvYXRp
bmdPYmplY3QpLCBGbG9hdGluZ09iamVjdF9zaG91bGRfc3RheV9zbWFsbCk7CiAKLUZsb2F0aW5n
T2JqZWN0OjpGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIHJlbmRlcmVyKQorRmxvYXRpbmdPYmpl
Y3Q6OkZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCYgcmVuZGVyZXIpCiAgICAgOiBtX3JlbmRlcmVy
KHJlbmRlcmVyKQotICAgICwgbV9vcmlnaW5hdGluZ0xpbmUoMCkKKyAgICAsIG1fb3JpZ2luYXRp
bmdMaW5lKG51bGxwdHIpCiAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQogICAgICwgbV9zaG91
bGRQYWludCh0cnVlKQogICAgICwgbV9pc0Rlc2NlbmRhbnQoZmFsc2UpCkBAIC01Myw3ICs1Myw3
IEBAIEZsb2F0aW5nT2JqZWN0OjpGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIHJlbmRlcmVyKQog
ICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxzZSkKICNlbmRpZgogewotICAgIEVGbG9hdCB0eXBl
ID0gcmVuZGVyZXItPnN0eWxlKCktPmZsb2F0aW5nKCk7CisgICAgRUZsb2F0IHR5cGUgPSByZW5k
ZXJlci5zdHlsZSgpLT5mbG9hdGluZygpOwogICAgIEFTU0VSVCh0eXBlICE9IE5vRmxvYXQpOwog
ICAgIGlmICh0eXBlID09IExlZnRGbG9hdCkKICAgICAgICAgbV90eXBlID0gRmxvYXRMZWZ0OwpA
QCAtNjEsOSArNjEsOSBAQCBGbG9hdGluZ09iamVjdDo6RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94
KiByZW5kZXJlcikKICAgICAgICAgbV90eXBlID0gRmxvYXRSaWdodDsKIH0KIAotRmxvYXRpbmdP
YmplY3Q6OkZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogcmVuZGVyZXIsIFR5cGUgdHlwZSwgY29u
c3QgTGF5b3V0UmVjdCYgZnJhbWVSZWN0LCBib29sIHNob3VsZFBhaW50LCBib29sIGlzRGVzY2Vu
ZGFudCkKK0Zsb2F0aW5nT2JqZWN0OjpGbG9hdGluZ09iamVjdChSZW5kZXJCb3gmIHJlbmRlcmVy
LCBUeXBlIHR5cGUsIGNvbnN0IExheW91dFJlY3QmIGZyYW1lUmVjdCwgYm9vbCBzaG91bGRQYWlu
dCwgYm9vbCBpc0Rlc2NlbmRhbnQpCiAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQotICAgICwg
bV9vcmlnaW5hdGluZ0xpbmUoMCkKKyAgICAsIG1fb3JpZ2luYXRpbmdMaW5lKG51bGxwdHIpCiAg
ICAgLCBtX2ZyYW1lUmVjdChmcmFtZVJlY3QpCiAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQog
ICAgICwgbV90eXBlKHR5cGUpCkBAIC03NiwyNyArNzYsMjggQEAgRmxvYXRpbmdPYmplY3Q6OkZs
b2F0aW5nT2JqZWN0KFJlbmRlckJveCogcmVuZGVyZXIsIFR5cGUgdHlwZSwgY29uc3QgTGF5b3V0
UmVjdCYKIHsKIH0KIAotUGFzc093blB0cjxGbG9hdGluZ09iamVjdD4gRmxvYXRpbmdPYmplY3Q6
OmNyZWF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyKQorc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2Jq
ZWN0PiBGbG9hdGluZ09iamVjdDo6Y3JlYXRlKFJlbmRlckJveCYgcmVuZGVyZXIpCiB7Ci0gICAg
T3duUHRyPEZsb2F0aW5nT2JqZWN0PiBuZXdPYmogPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmpl
Y3QocmVuZGVyZXIpKTsKLSAgICBuZXdPYmotPnNldFNob3VsZFBhaW50KCFyZW5kZXJlci0+aGFz
U2VsZlBhaW50aW5nTGF5ZXIoKSk7IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQgd2ls
bCBwYWludCBpdHNlbGYuIE90aGVyd2lzZSBzb21lb25lIGVsc2Ugd2lsbC4KLSAgICBuZXdPYmot
PnNldElzRGVzY2VuZGFudCh0cnVlKTsKLQotICAgIHJldHVybiBuZXdPYmoucmVsZWFzZSgpOwor
ICAgIGF1dG8gb2JqZWN0ID0gc3RkOjptYWtlX3VuaXF1ZTxGbG9hdGluZ09iamVjdD4ocmVuZGVy
ZXIpOworICAgIG9iamVjdC0+c2V0U2hvdWxkUGFpbnQoIXJlbmRlcmVyLmhhc1NlbGZQYWludGlu
Z0xheWVyKCkpOyAvLyBJZiBhIGxheWVyIGV4aXN0cywgdGhlIGZsb2F0IHdpbGwgcGFpbnQgaXRz
ZWxmLiBPdGhlcndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCisgICAgb2JqZWN0LT5zZXRJc0Rlc2Nl
bmRhbnQodHJ1ZSk7CisgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotUGFzc093blB0cjxGbG9hdGlu
Z09iamVjdD4gRmxvYXRpbmdPYmplY3Q6OmNvcHlUb05ld0NvbnRhaW5lcihMYXlvdXRTaXplIG9m
ZnNldCwgYm9vbCBzaG91bGRQYWludCwgYm9vbCBpc0Rlc2NlbmRhbnQpIGNvbnN0CitzdGQ6OnVu
aXF1ZV9wdHI8RmxvYXRpbmdPYmplY3Q+IEZsb2F0aW5nT2JqZWN0Ojpjb3B5VG9OZXdDb250YWlu
ZXIoTGF5b3V0U2l6ZSBvZmZzZXQsIGJvb2wgc2hvdWxkUGFpbnQsIGJvb2wgaXNEZXNjZW5kYW50
KSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3QocmVuZGVy
ZXIoKSwgdHlwZSgpLCBMYXlvdXRSZWN0KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkgLSBvZmZzZXQs
IGZyYW1lUmVjdCgpLnNpemUoKSksIHNob3VsZFBhaW50LCBpc0Rlc2NlbmRhbnQpKTsKKyAgICAv
LyBGSVhNRTogVXNlIG1ha2VfdW5pcXVlIGhlcmUsIG9uY2Ugd2UgY2FuIGdldCBpdCB0byBjb21w
aWxlIG9uIGFsbCBwbGF0Zm9ybXMgd2Ugc3VwcG9ydC4KKyAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEZsb2F0aW5nT2JqZWN0PihuZXcgRmxvYXRpbmdPYmplY3QocmVuZGVyZXIoKSwgdHlwZSgp
LCBMYXlvdXRSZWN0KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkgLSBvZmZzZXQsIGZyYW1lUmVjdCgp
LnNpemUoKSksIHNob3VsZFBhaW50LCBpc0Rlc2NlbmRhbnQpKTsKIH0KIAotUGFzc093blB0cjxG
bG9hdGluZ09iamVjdD4gRmxvYXRpbmdPYmplY3Q6OnVuc2FmZUNsb25lKCkgY29uc3QKK3N0ZDo6
dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4gRmxvYXRpbmdPYmplY3Q6OnVuc2FmZUNsb25lKCkg
Y29uc3QKIHsKLSAgICBPd25QdHI8RmxvYXRpbmdPYmplY3Q+IGNsb25lT2JqZWN0ID0gYWRvcHRQ
dHIobmV3IEZsb2F0aW5nT2JqZWN0KHJlbmRlcmVyKCksIHR5cGUoKSwgbV9mcmFtZVJlY3QsIG1f
c2hvdWxkUGFpbnQsIG1faXNEZXNjZW5kYW50KSk7CisgICAgLy8gRklYTUU6IFVzZSBtYWtlX3Vu
aXF1ZSBoZXJlLCBvbmNlIHdlIGNhbiBnZXQgaXQgdG8gY29tcGlsZSBvbiBhbGwgcGxhdGZvcm1z
IHdlIHN1cHBvcnQuCisgICAgc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PihuZXcgRmxv
YXRpbmdPYmplY3QocmVuZGVyZXIoKSwgdHlwZSgpLCBtX2ZyYW1lUmVjdCwgbV9zaG91bGRQYWlu
dCwgbV9pc0Rlc2NlbmRhbnQpKTsKICAgICBjbG9uZU9iamVjdC0+bV9vcmlnaW5hdGluZ0xpbmUg
PSBtX29yaWdpbmF0aW5nTGluZTsKICAgICBjbG9uZU9iamVjdC0+bV9wYWdpbmF0aW9uU3RydXQg
PSBtX3BhZ2luYXRpb25TdHJ1dDsKICAgICBjbG9uZU9iamVjdC0+bV9pc1BsYWNlZCA9IG1faXNQ
bGFjZWQ7Ci0gICAgcmV0dXJuIGNsb25lT2JqZWN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gY2xv
bmVPYmplY3Q7CiB9CiAKIHRlbXBsYXRlIDxGbG9hdGluZ09iamVjdDo6VHlwZSBGbG9hdFR5cGVW
YWx1ZT4KQEAgLTE0OCwxNSArMTQ5LDEyIEBAIEZsb2F0aW5nT2JqZWN0czo6RmxvYXRpbmdPYmpl
Y3RzKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgYm9vbCBob3Jpem9udGFsV3JpCiAKIEZs
b2F0aW5nT2JqZWN0czo6fkZsb2F0aW5nT2JqZWN0cygpCiB7Ci0gICAgLy8gRklYTUU6IG1fc2V0
IHNob3VsZCB1c2UgT3duUHRyIGluc3RlYWQuCi0gICAgZGVsZXRlQWxsVmFsdWVzKG1fc2V0KTsK
IH0KIAogdm9pZCBGbG9hdGluZ09iamVjdHM6OmNsZWFyTGluZUJveFRyZWVQb2ludGVycygpCiB7
CiAgICAgLy8gQ2xlYXIgcmVmZXJlbmNlcyB0byBvcmlnaW5hdGluZyBsaW5lcywgc2luY2UgdGhl
IGxpbmVzIGFyZSBiZWluZyBkZWxldGVkCi0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBtX3NldC5lbmQoKTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBtX3NldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8gaXQgPSBt
X3NldC5iZWdpbigpLCBlbmQgPSBtX3NldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIEFTU0VSVCghKCgqaXQpLT5vcmlnaW5hdGluZ0xpbmUoKSkgfHwgJigoKml0KS0+b3JpZ2lu
YXRpbmdMaW5lKCktPnJlbmRlcmVyKCkpID09IG1fcmVuZGVyZXIpOwogICAgICAgICAoKml0KS0+
c2V0T3JpZ2luYXRpbmdMaW5lKDApOwogICAgIH0KQEAgLTE2NCw3ICsxNjIsNiBAQCB2b2lkIEZs
b2F0aW5nT2JqZWN0czo6Y2xlYXJMaW5lQm94VHJlZVBvaW50ZXJzKCkKIAogdm9pZCBGbG9hdGlu
Z09iamVjdHM6OmNsZWFyKCkKIHsKLSAgICBkZWxldGVBbGxWYWx1ZXMobV9zZXQpOwogICAgIG1f
c2V0LmNsZWFyKCk7CiAgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmNsZWFyKCk7CiAgICAgbV9sZWZ0
T2JqZWN0c0NvdW50ID0gMDsKQEAgLTE3MywxNCArMTcwLDEzIEBAIHZvaWQgRmxvYXRpbmdPYmpl
Y3RzOjpjbGVhcigpCiAKIHZvaWQgRmxvYXRpbmdPYmplY3RzOjptb3ZlQWxsVG9GbG9hdEluZm9N
YXAoUmVuZGVyZXJUb0Zsb2F0SW5mb01hcCYgbWFwKQogewotICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGl0ID0gbV9zZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBmID0gKml0OwotICAgICAgICBtYXAuYWRkKGYtPnJlbmRlcmVyKCksIGYp
OworICAgIGZvciAoYXV0byBpdCA9IG1fc2V0LmJlZ2luKCksIGVuZCA9IG1fc2V0LmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBpdC0+Z2V0KCktPnJl
bmRlcmVyKCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGUgb25seSByZWFzb24gaXQgaXMgc2FmZSB0
byBtb3ZlIHRoZXNlIG91dCBvZiB0aGUgc2V0IGlzIHRoYXQKKyAgICAgICAgLy8gd2UgYXJlIGFi
b3V0IHRvIGNsZWFyIGl0LiBPdGhlcndpc2UgaXQgd291bGQgYnJlYWsgdGhlIGhhc2ggdGFibGUg
aW52YXJpYW50LgorICAgICAgICAvLyBBIGNsZWFuIHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRv
IGFkZCBhIHRha2VBbGwgZnVuY3Rpb24gdG8gSGFzaFNldC4KKyAgICAgICAgbWFwLmFkZCgmcmVu
ZGVyZXIsIHN0ZDo6bW92ZSgqaXQpKTsKICAgICB9Ci0gICAgLy8gY2xlYXIgc2V0IGJlZm9yZSBj
bGVhcmluZyB0aGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWxldGUgYWxsIG9mCi0gICAg
Ly8gdGhlIG9iamVjdHMgd2UgaGF2ZSBqdXN0IHRyYW5zZmVycmVkLgotICAgIG1fc2V0LmNsZWFy
KCk7CiAgICAgY2xlYXIoKTsKIH0KIApAQCAtMjM1LDI1ICsyMzEsMjYgQEAgdm9pZCBGbG9hdGlu
Z09iamVjdHM6OnJlbW92ZVBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmpl
Y3QpCiAjZW5kaWYKIH0KIAotRmxvYXRpbmdPYmplY3QqIEZsb2F0aW5nT2JqZWN0czo6YWRkKFBh
c3NPd25QdHI8RmxvYXRpbmdPYmplY3Q+IGZsb2F0aW5nT2JqZWN0KQorRmxvYXRpbmdPYmplY3Qq
IEZsb2F0aW5nT2JqZWN0czo6YWRkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4gZmxv
YXRpbmdPYmplY3QpCiB7Ci0gICAgRmxvYXRpbmdPYmplY3QqIG5ld09iamVjdCA9IGZsb2F0aW5n
T2JqZWN0LmxlYWtQdHIoKTsKLSAgICBpbmNyZWFzZU9iamVjdHNDb3VudChuZXdPYmplY3QtPnR5
cGUoKSk7Ci0gICAgbV9zZXQuYWRkKG5ld09iamVjdCk7Ci0gICAgaWYgKG5ld09iamVjdC0+aXNQ
bGFjZWQoKSkKLSAgICAgICAgYWRkUGxhY2VkT2JqZWN0KG5ld09iamVjdCk7Ci0gICAgcmV0dXJu
IG5ld09iamVjdDsKKyAgICBpbmNyZWFzZU9iamVjdHNDb3VudChmbG9hdGluZ09iamVjdC0+dHlw
ZSgpKTsKKyAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCisgICAgICAgIGFkZFBs
YWNlZE9iamVjdChmbG9hdGluZ09iamVjdC5nZXQoKSk7CisgICAgcmV0dXJuIG1fc2V0LmFkZChz
dGQ6Om1vdmUoZmxvYXRpbmdPYmplY3QpKS5pdGVyYXRvci0+Z2V0KCk7CiB9CiAKIHZvaWQgRmxv
YXRpbmdPYmplY3RzOjpyZW1vdmUoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQogewor
ICAgIEFTU0VSVCgobV9zZXQuY29udGFpbnM8RmxvYXRpbmdPYmplY3QmLCBGbG9hdGluZ09iamVj
dEhhc2hUcmFuc2xhdG9yPigqZmxvYXRpbmdPYmplY3QpKSk7CiAgICAgZGVjcmVhc2VPYmplY3Rz
Q291bnQoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSk7Ci0gICAgbV9zZXQucmVtb3ZlKGZsb2F0aW5n
T2JqZWN0KTsKICAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkgfHwgIWZsb2F0
aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlz
UGxhY2VkKCkpCiAgICAgICAgIHJlbW92ZVBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7CiAg
ICAgQVNTRVJUKCFmbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCkpOwotICAgIGRlbGV0
ZSBmbG9hdGluZ09iamVjdDsKKyAgICBhdXRvIGl0ID0gbV9zZXQuZmluZDxGbG9hdGluZ09iamVj
dCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpmbG9hdGluZ09iamVjdCk7CisgICAg
aWYgKGl0ID09IG1fc2V0LmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9zZXQucmVtb3Zl
KGl0KTsKIH0KIAogdm9pZCBGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVl
KCkKQEAgLTI2MiwxNSArMjU5LDIwIEBAIHZvaWQgRmxvYXRpbmdPYmplY3RzOjpjb21wdXRlUGxh
Y2VkRmxvYXRzVHJlZSgpCiAgICAgaWYgKG1fc2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5pbml0SWZOZWVkZWQobV9yZW5kZXJlci0+dmlldygp
LmludGVydmFsQXJlbmEoKSk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1f
c2V0LmJlZ2luKCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX3NldC5l
bmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2Jq
ZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3NldC5iZWdp
bigpLCBlbmQgPSBtX3NldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGl0LT5nZXQoKTsKICAgICAgICAgaWYgKGZsb2F0
aW5nT2JqZWN0LT5pc1BsYWNlZCgpKQogICAgICAgICAgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmFk
ZChpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7CiAgICAgfQogfQog
CitpbmxpbmUgY29uc3QgRmxvYXRpbmdPYmplY3RUcmVlJiBGbG9hdGluZ09iamVjdHM6OnBsYWNl
ZEZsb2F0c1RyZWUoKQoreworICAgIGlmICghbV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6
ZWQoKSkKKyAgICAgICAgY29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKTsKKyAgICByZXR1cm4gbV9w
bGFjZWRGbG9hdHNUcmVlOworfQorCiBMYXlvdXRVbml0IEZsb2F0aW5nT2JqZWN0czo6bG9naWNh
bExlZnRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSBv
ZmZzZXRNb2RlLCBMYXlvdXRVbml0ICpoZWlnaHRSZW1haW5pbmcpCiB7CiAjaWYgIUVOQUJMRShD
U1NfU0hBUEVTKQpAQCAtMjg3LDcgKzI4OSw3IEBAIExheW91dFVuaXQgRmxvYXRpbmdPYmplY3Rz
Ojpsb2dpY2FsTGVmdE9mZnNldChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0CiAj
aWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIG91dGVybW9z
dEZsb2F0ID0gYWRhcHRlci5vdXRlcm1vc3RGbG9hdCgpOwogICAgIGlmIChvZmZzZXRNb2RlID09
IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYgb3V0ZXJtb3N0RmxvYXQpIHsKLSAgICAg
ICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG91dGVybW9zdEZsb2F0LT5y
ZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCkpIHsKKyAgICAgICAgaWYgKFNoYXBlT3V0c2lk
ZUluZm8qIHNoYXBlT3V0c2lkZSA9IG91dGVybW9zdEZsb2F0LT5yZW5kZXJlcigpLnNoYXBlT3V0
c2lkZUluZm8oKSkgewogICAgICAgICAgICAgc2hhcGVPdXRzaWRlLT51cGRhdGVEZWx0YXNGb3JD
b250YWluaW5nQmxvY2tMaW5lKG1fcmVuZGVyZXIsIG91dGVybW9zdEZsb2F0LCBsb2dpY2FsVG9w
LCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgIG9mZnNldCArPSBzaGFwZU91dHNpZGUtPnJp
Z2h0TWFyZ2luQm94RGVsdGEoKTsKICAgICAgICAgfQpAQCAtMzEzLDcgKzMxNSw3IEBAIExheW91
dFVuaXQgRmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsUmlnaHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhl
ZE9mZnNldCwgTGF5b3V0VW5pCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3QqIG91dGVybW9zdEZsb2F0ID0gYWRhcHRlci5vdXRlcm1vc3RGbG9hdCgpOwog
ICAgIGlmIChvZmZzZXRNb2RlID09IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYgb3V0
ZXJtb3N0RmxvYXQpIHsKLSAgICAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lk
ZSA9IG91dGVybW9zdEZsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCkpIHsKKyAg
ICAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG91dGVybW9zdEZsb2F0
LT5yZW5kZXJlcigpLnNoYXBlT3V0c2lkZUluZm8oKSkgewogICAgICAgICAgICAgc2hhcGVPdXRz
aWRlLT51cGRhdGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKG1fcmVuZGVyZXIsIG91dGVy
bW9zdEZsb2F0LCBsb2dpY2FsVG9wLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgIG9mZnNl
dCArPSBzaGFwZU91dHNpZGUtPmxlZnRNYXJnaW5Cb3hEZWx0YSgpOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmgKaW5kZXggMjk2YzdkNjFlZTAz
YTY3NjVmOWMyMGIwZGFhYmY4NDdkYmNhOTBiMC4uY2RhNWEzY2ZjYzBhZmI1NGY5NzcyMzgxOTQ3
NzUzMzc0MmVlZDE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb2F0
aW5nT2JqZWN0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVj
dHMuaApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlBPREludGVydmFsVHJlZS5oIgogI2lu
Y2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTQg
KzQxLDE1IEBAIHB1YmxpYzoKICAgICAvLyBOb3RlIHRoYXQgVHlwZSB1c2VzIGJpdHMgc28geW91
IGNhbiB1c2UgRmxvYXRMZWZ0UmlnaHQgYXMgYSBtYXNrIHRvIHF1ZXJ5IGZvciBib3RoIGxlZnQg
YW5kIHJpZ2h0LgogICAgIGVudW0gVHlwZSB7IEZsb2F0TGVmdCA9IDEsIEZsb2F0UmlnaHQgPSAy
LCBGbG9hdExlZnRSaWdodCA9IDMgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPEZsb2F0aW5n
T2JqZWN0PiBjcmVhdGUoUmVuZGVyQm94Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxG
bG9hdGluZ09iamVjdD4gY3JlYXRlKFJlbmRlckJveCYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxG
bG9hdGluZ09iamVjdD4gY29weVRvTmV3Q29udGFpbmVyKExheW91dFNpemUsIGJvb2wgc2hvdWxk
UGFpbnQgPSBmYWxzZSwgYm9vbCBpc0Rlc2NlbmRhbnQgPSBmYWxzZSkgY29uc3Q7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiB1bnNhZmVDbG9uZSgpIGNvbnN0OwogCi0gICAg
UGFzc093blB0cjxGbG9hdGluZ09iamVjdD4gY29weVRvTmV3Q29udGFpbmVyKExheW91dFNpemUs
IGJvb2wgc2hvdWxkUGFpbnQgPSBmYWxzZSwgYm9vbCBpc0Rlc2NlbmRhbnQgPSBmYWxzZSkgY29u
c3Q7Ci0KLSAgICBQYXNzT3duUHRyPEZsb2F0aW5nT2JqZWN0PiB1bnNhZmVDbG9uZSgpIGNvbnN0
OworICAgIGV4cGxpY2l0IEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCYpOworICAgIEZsb2F0aW5n
T2JqZWN0KFJlbmRlckJveCYsIFR5cGUsIGNvbnN0IExheW91dFJlY3QmLCBib29sIHNob3VsZFBh
aW50LCBib29sIGlzRGVzY2VuZGFudCk7CiAKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9Ci0gICAgUmVuZGVyQm94KiByZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KKyAgICBSZW5kZXJCb3gmIHJlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQogCiAgICAgYm9vbCBpc1BsYWNlZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNQbGFjZWQ7IH0KICAgICB2b2lkIHNldElzUGxhY2VkKGJvb2wgcGxhY2Vk
ID0gdHJ1ZSkgeyBtX2lzUGxhY2VkID0gcGxhY2VkOyB9CkBAIC0xMjcsMTAgKzEyNyw3IEBAIHB1
YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRmxvYXRpbmdPYmplY3QoUmVu
ZGVyQm94Kik7Ci0gICAgRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiwgVHlwZSwgY29uc3QgTGF5
b3V0UmVjdCYsIGJvb2wgc2hvdWxkUGFpbnQsIGJvb2wgaXNEZXNjZW5kYW50KTsKLQotICAgIFJl
bmRlckJveCogbV9yZW5kZXJlcjsKKyAgICBSZW5kZXJCb3gmIG1fcmVuZGVyZXI7CiAgICAgUm9v
dElubGluZUJveCogbV9vcmlnaW5hdGluZ0xpbmU7CiAgICAgTGF5b3V0UmVjdCBtX2ZyYW1lUmVj
dDsKICAgICBpbnQgbV9wYWdpbmF0aW9uU3RydXQ7IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBh
IExheW91dFVuaXQsIHNpbmNlIGl0J3MgYSB2ZXJ0aWNhbCBvZmZzZXQuCkBAIC0xNDUsMjAgKzE0
MiwyNiBAQCBwcml2YXRlOgogfTsKIAogc3RydWN0IEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9u
cyB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRmxvYXRpbmdPYmplY3QqIGtleSkgeyByZXR1
cm4gRGVmYXVsdEhhc2g8UmVuZGVyQm94Kj46Okhhc2g6Omhhc2goa2V5LT5yZW5kZXJlcigpKTsg
fQotICAgIHN0YXRpYyBib29sIGVxdWFsKEZsb2F0aW5nT2JqZWN0KiBhLCBGbG9hdGluZ09iamVj
dCogYikgeyByZXR1cm4gYS0+cmVuZGVyZXIoKSA9PSBiLT5yZW5kZXJlcigpOyB9CisgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiYg
a2V5KSB7IHJldHVybiBQdHJIYXNoPFJlbmRlckJveCo+OjpoYXNoKCZrZXktPnJlbmRlcmVyKCkp
OyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5n
T2JqZWN0PiYgYSwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiYgYikgeyBy
ZXR1cm4gJmEtPnJlbmRlcmVyKCkgPT0gJmItPnJlbmRlcmVyKCk7IH0KICAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9Owogc3RydWN0
IEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3IgewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KFJlbmRlckJveCoga2V5KSB7IHJldHVybiBEZWZhdWx0SGFzaDxSZW5kZXJCb3gqPjo6SGFzaDo6
aGFzaChrZXkpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoRmxvYXRpbmdPYmplY3QqIGEsIFJl
bmRlckJveCogYikgeyByZXR1cm4gYS0+cmVuZGVyZXIoKSA9PSBiOyB9CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgUmVuZGVyQm94JiBrZXkpIHsgcmV0dXJuIFB0ckhhc2g8Y29uc3Qg
UmVuZGVyQm94Kj46Omhhc2goJmtleSk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBGbG9hdGluZ09iamVjdCYga2V5KSB7IHJldHVybiBQdHJIYXNoPFJlbmRlckJveCo+OjpoYXNo
KCZrZXkucmVuZGVyZXIoKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBzdGQ6OnVu
aXF1ZV9wdHI8RmxvYXRpbmdPYmplY3Q+JiBhLCBjb25zdCBSZW5kZXJCb3gmIGIpIHsgcmV0dXJu
ICZhLT5yZW5kZXJlcigpID09ICZiOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qgc3Rk
Ojp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiYgYSwgY29uc3QgRmxvYXRpbmdPYmplY3QmIGIp
IHsgcmV0dXJuICZhLT5yZW5kZXJlcigpID09ICZiLnJlbmRlcmVyKCk7IH0KIH07Ci10eXBlZGVm
IExpc3RIYXNoU2V0PEZsb2F0aW5nT2JqZWN0KiwgNCwgRmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rp
b25zPiBGbG9hdGluZ09iamVjdFNldDsKLXR5cGVkZWYgRmxvYXRpbmdPYmplY3RTZXQ6OmNvbnN0
X2l0ZXJhdG9yIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3I7CisKK3R5cGVkZWYgTGlzdEhhc2hT
ZXQ8c3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiwgNCwgRmxvYXRpbmdPYmplY3RIYXNo
RnVuY3Rpb25zPiBGbG9hdGluZ09iamVjdFNldDsKKwogdHlwZWRlZiBQT0RJbnRlcnZhbDxpbnQs
IEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsKIHR5cGVkZWYgUE9ESW50
ZXJ2YWxUcmVlPGludCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdFRyZWU7CiB0eXBl
ZGVmIFBPREZyZWVMaXN0QXJlbmE8UE9EUmVkQmxhY2tUcmVlPEZsb2F0aW5nT2JqZWN0SW50ZXJ2
YWw+OjpOb2RlPiBJbnRlcnZhbEFyZW5hOwotdHlwZWRlZiBIYXNoTWFwPFJlbmRlckJveCosIEZs
b2F0aW5nT2JqZWN0Kj4gUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDsKKworLy8gRklYTUU6IFRoaXMg
aXMgcmVhbGx5IHRoZSBzYW1lIHRoaW5nIGFzIEZsb2F0aW5nT2JqZWN0U2V0LgorLy8gQ2hhbmdl
IGNsaWVudHMgdG8gdXNlIHRoYXQgc2V0IGRpcmVjdGx5LCBhbmQgcmVwbGFjZSB0aGUgbW92ZUFs
bFRvRmxvYXRJbmZvTWFwIGZ1bmN0aW9uIHdpdGggYSB0YWtlU2V0IGZ1bmN0aW9uLgordHlwZWRl
ZiBIYXNoTWFwPFJlbmRlckJveCosIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4+IFJl
bmRlcmVyVG9GbG9hdEluZm9NYXA7CiAKIGNsYXNzIEZsb2F0aW5nT2JqZWN0cyB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRmxvYXRpbmdPYmplY3RzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CkBAIC0xNjgsNyArMTcxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpOwogICAg
IHZvaWQgbW92ZUFsbFRvRmxvYXRJbmZvTWFwKFJlbmRlcmVyVG9GbG9hdEluZm9NYXAmKTsKLSAg
ICBGbG9hdGluZ09iamVjdCogYWRkKFBhc3NPd25QdHI8RmxvYXRpbmdPYmplY3Q+KTsKKyAgICBG
bG9hdGluZ09iamVjdCogYWRkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4pOwogICAg
IHZvaWQgcmVtb3ZlKEZsb2F0aW5nT2JqZWN0Kik7CiAgICAgdm9pZCBhZGRQbGFjZWRPYmplY3Qo
RmxvYXRpbmdPYmplY3QqKTsKICAgICB2b2lkIHJlbW92ZVBsYWNlZE9iamVjdChGbG9hdGluZ09i
amVjdCopOwpAQCAtMTgwLDE0ICsxODMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJMaW5l
Qm94VHJlZVBvaW50ZXJzKCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldChMYXlv
dXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlID0gU2hhcGVPdXRzaWRlRmxv
YXRTaGFwZU9mZnNldCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nID0gMCk7CiAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0
VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZs
b2F0T2Zmc2V0TW9kZSA9IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIExheW91dFVuaXQq
IGhlaWdodFJlbWFpbmluZyA9IDApOworCiBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZVBsYWNl
ZEZsb2F0c1RyZWUoKTsKLSAgICBjb25zdCBGbG9hdGluZ09iamVjdFRyZWUmIHBsYWNlZEZsb2F0
c1RyZWUoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFs
aXplZCgpKQotICAgICAgICAgICAgY29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKTsKLSAgICAgICAg
cmV0dXJuIG1fcGxhY2VkRmxvYXRzVHJlZTsKLSAgICB9CisgICAgY29uc3QgRmxvYXRpbmdPYmpl
Y3RUcmVlJiBwbGFjZWRGbG9hdHNUcmVlKCk7CiAgICAgdm9pZCBpbmNyZWFzZU9iamVjdHNDb3Vu
dChGbG9hdGluZ09iamVjdDo6VHlwZSk7CiAgICAgdm9pZCBkZWNyZWFzZU9iamVjdHNDb3VudChG
bG9hdGluZ09iamVjdDo6VHlwZSk7CiAgICAgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBpbnRlcnZh
bEZvckZsb2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGluZVdpZHRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MaW5lV2lkdGguY3BwCmluZGV4IGZjMWY0Njc1MTQ0ZjZmMTRlNWVkMDZhZGE2YWY3OGZmZmVm
YTY3MzYuLjU2YWYzZmYxMDNiZDY3YWYxYzg1N2QwMmIzNjZjZTY0ZmU0NmQwMzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MaW5lV2lkdGguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MaW5lV2lkdGguY3BwCkBAIC0xMDMsMjAgKzEwMywyMCBAQCB2b2lk
IExpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElmTmVlZGVkKEZsb2F0
aW5nT2JqZWN0KiBuZXdGbG9hdAogICAgIC8vIHRoZSBmaXJzdCBwcmV2aW91cyBmbG9hdCB0aGF0
IGlzIG9uIHRoZSBzYW1lIHNpZGUgYXMgb3VyIG5ld0Zsb2F0LgogICAgIFNoYXBlT3V0c2lkZUlu
Zm8qIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbyA9IDA7CiAgICAgY29uc3QgRmxvYXRpbmdPYmpl
Y3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9ibG9jay5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmVuZCgpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBmbG9hdGluZ09i
amVjdFNldC5iZWdpbigpOworICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
KyAgICBhdXRvIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICBMYXlvdXRV
bml0IGxpbmVIZWlnaHQgPSBtX2Jsb2NrLmxpbmVIZWlnaHQobV9pc0ZpcnN0TGluZSwgbV9ibG9j
ay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExp
bmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7CiAgICAgZm9yICgtLWl0OyBpdCAhPSBi
ZWdpbjsgLS1pdCkgewotICAgICAgICBGbG9hdGluZ09iamVjdCogcHJldmlvdXNGbG9hdCA9ICpp
dDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHByZXZpb3VzRmxvYXQgPSBpdC0+Z2V0KCk7CiAg
ICAgICAgIGlmIChwcmV2aW91c0Zsb2F0ICE9IG5ld0Zsb2F0ICYmIHByZXZpb3VzRmxvYXQtPnR5
cGUoKSA9PSBuZXdGbG9hdC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBwcmV2aW91c1NoYXBlT3V0
c2lkZUluZm8gPSBwcmV2aW91c0Zsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCk7
CisgICAgICAgICAgICBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8gPSBwcmV2aW91c0Zsb2F0LT5y
ZW5kZXJlcigpLnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgICAgIGlmIChwcmV2aW91c1No
YXBlT3V0c2lkZUluZm8pCiAgICAgICAgICAgICAgICAgcHJldmlvdXNTaGFwZU91dHNpZGVJbmZv
LT51cGRhdGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKCZtX2Jsb2NrLCBwcmV2aW91c0Zs
b2F0LCBtX2Jsb2NrLmxvZ2ljYWxIZWlnaHQoKSwgbGluZUhlaWdodCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0
c2lkZUluZm8gPSBuZXdGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRlSW5mbygpOworICAg
IFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8gPSBuZXdGbG9hdC0+cmVuZGVyZXIo
KS5zaGFwZU91dHNpZGVJbmZvKCk7CiAgICAgaWYgKHNoYXBlT3V0c2lkZUluZm8pCiAgICAgICAg
IHNoYXBlT3V0c2lkZUluZm8tPnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUoJm1f
YmxvY2ssIG5ld0Zsb2F0LCBtX2Jsb2NrLmxvZ2ljYWxIZWlnaHQoKSwgbGluZUhlaWdodCk7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDM1ZDBh
ZDI3MWNmOGMxYTM3NzE1Mzg2NTRjYTY5MTgzZjA0OTI1OWUuLjUzYzE3NTVhNmNlMTAyZThlNjQ4
ZjY4YmM2ZjVkNmFkM2E3ZjIwNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcApAQCAtMzM2LDE2ICszMzYsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHkKICAg
ICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgc19jYW5Qcm9wYWdhdGVGbG9h
dEludG9TaWJsaW5nICYmICFjYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nICYmIGhhc092ZXJo
YW5naW5nRmxvYXRzKCkpIHsKICAgICAgICAgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrID0gdGhp
czsKICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0g
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICBhdXRvIGVuZCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogCiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJy
ID0gcGFyZW50KCk7IGN1cnIgJiYgIWN1cnItPmlzUmVuZGVyVmlldygpOyBjdXJyID0gY3Vyci0+
cGFyZW50KCkpIHsKICAgICAgICAgICAgIGlmIChjdXJyLT5pc1JlbmRlckJsb2NrKCkpIHsKICAg
ICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY3VyckJsb2NrID0gdG9SZW5kZXJCbG9jayhjdXJy
KTsKIAogICAgICAgICAgICAgICAgIGlmIChjdXJyQmxvY2stPmhhc092ZXJoYW5naW5nRmxvYXRz
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIHJlbmRlcmVyID0gKCppdCktPnJlbmRlcmVy
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyckJsb2NrLT5oYXNPdmVyaGFuZ2lu
Z0Zsb2F0KHJlbmRlcmVyKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBm
bG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlckJveCYgcmVuZGVyZXIgPSAoKml0KS0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyQmxvY2stPmhhc092ZXJoYW5naW5nRmxvYXQo
JnJlbmRlcmVyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEJsb2NrID0g
Y3VyckJsb2NrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtMTEzOCwxMyArMTEzOCwxMyBAQCB2b2lkIFJlbmRlckJsb2Nr
Ojptb3ZlQWxsQ2hpbGRyZW5JbmNsdWRpbmdGbG9hdHNUbyhSZW5kZXJCbG9jayogdG9CbG9jaywg
Ym9vbCBmdQogICAgICAgICAgICAgdG9CbG9jay0+Y3JlYXRlRmxvYXRpbmdPYmplY3RzKCk7CiAK
ICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZyb21GbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBlbmQgPSBmcm9tRmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgIGF1dG8gZW5k
ID0gZnJvbUZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogCi0gICAgICAgIGZvciAoRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBpdCA9IGZyb21GbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVj
dCA9ICppdDsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gZnJvbUZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZs
b2F0aW5nT2JqZWN0ID0gaXQtPmdldCgpOwogCiAgICAgICAgICAgICAvLyBEb24ndCBpbnNlcnQg
dGhlIG9iamVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKLSAgICAgICAgICAg
IGlmICh0b0Jsb2NrLT5jb250YWluc0Zsb2F0KGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKSkK
KyAgICAgICAgICAgIGlmICh0b0Jsb2NrLT5jb250YWluc0Zsb2F0KCZmbG9hdGluZ09iamVjdC0+
cmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHRv
QmxvY2stPm1fZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmplY3QtPnVuc2FmZUNsb25l
KCkpOwpAQCAtMTY2OCwxMSArMTY2OCwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRPdmVyZmxv
d0Zyb21GbG9hdHMoKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBGbG9hdGluZ09iamVj
dFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
LSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNl
dC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIg
PSAqaXQ7CisgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICBmb3Ig
KGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBpdC0+Z2V0KCk7CiAgICAgICAgIGlmIChyLT5p
c0Rlc2NlbmRhbnQoKSkKLSAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUNoaWxkKHItPnJlbmRl
cmVyKCksIEludFNpemUoeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ociksIHlQb3Np
dGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpKSk7CisgICAgICAgICAgICBhZGRPdmVyZmxv
d0Zyb21DaGlsZCgmci0+cmVuZGVyZXIoKSwgSW50U2l6ZSh4UG9zaXRpb25Gb3JGbG9hdEluY2x1
ZGluZ01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikpKTsKICAg
ICB9CiB9CiAKQEAgLTIxODMsMTcgKzIxODMsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWlu
dE92ZXJoYW5naW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cykKICAgICAvLyBpbiB0
aGlzIGJsb2NrLiBCZXR0ZXIgeWV0IHdvdWxkIGJlIHRvIHB1c2ggZXh0cmEgc3RhdGUgZm9yIHRo
ZSBjb250YWluZXJzIG9mIG90aGVyIGZsb2F0cy4KICAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxh
eW91dFN0YXRlRGlzYWJsZXIoJnZpZXcoKSk7CiAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAg
Zm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0
OworICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgZm9yIChhdXRv
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQtPmdldCgpOwogICAgICAgICAvLyBPbmx5IHJlcGFp
bnQgdGhlIG9iamVjdCBpZiBpdCBpcyBvdmVyaGFuZ2luZywgaXMgbm90IGluIGl0cyBvd24gbGF5
ZXIsIGFuZAogICAgICAgICAvLyBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gcGFpbnQgKG1fc2hv
dWxkUGFpbnQgaXMgc2V0KS4gV2hlbiBwYWludEFsbERlc2NlbmRhbnRzIGlzIHRydWUsIHRoZSBs
YXR0ZXIKICAgICAgICAgLy8gY29uZGl0aW9uIGlzIHJlcGxhY2VkIHdpdGggYmVpbmcgYSBkZXNj
ZW5kYW50IG9mIHVzLgogICAgICAgICBpZiAoci0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKSA+IGxvZ2ljYWxIZWlnaHQoKQotICAgICAgICAgICAgJiYgIXItPnJlbmRl
cmVyKCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkKLSAgICAgICAgICAgICYmIChyLT5zaG91bGRQ
YWludCgpIHx8IChwYWludEFsbERlc2NlbmRhbnRzICYmIHItPnJlbmRlcmVyKCktPmlzRGVzY2Vu
ZGFudE9mKHRoaXMpKSkpIHsKLSAgICAgICAgICAgIHItPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsK
LSAgICAgICAgICAgIHItPnJlbmRlcmVyKCktPnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhmYWxz
ZSk7CisgICAgICAgICAgICAmJiAhci0+cmVuZGVyZXIoKS5oYXNTZWxmUGFpbnRpbmdMYXllcigp
CisgICAgICAgICAgICAmJiAoci0+c2hvdWxkUGFpbnQoKSB8fCAocGFpbnRBbGxEZXNjZW5kYW50
cyAmJiByLT5yZW5kZXJlcigpLmlzRGVzY2VuZGFudE9mKHRoaXMpKSkpIHsKKyAgICAgICAgICAg
IHItPnJlbmRlcmVyKCkucmVwYWludCgpOworICAgICAgICAgICAgci0+cmVuZGVyZXIoKS5yZXBh
aW50T3ZlcmhhbmdpbmdGbG9hdHMoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjU4
Niw4ICsyNTg2LDggQEAgTGF5b3V0UG9pbnQgUmVuZGVyQmxvY2s6OmZsaXBGbG9hdEZvcldyaXRp
bmdNb2RlRm9yQ2hpbGQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGMKICAgICAvLyBpdCdzIGdvaW5n
IHRvIGdldCBhZGRlZCBiYWNrIGluLiBXZSBoaWRlIHRoaXMgY29tcGxpY2F0aW9uIGhlcmUgc28g
dGhhdCB0aGUgY2FsbGluZyBjb2RlIGxvb2tzIG5vcm1hbCBmb3IgdGhlIHVuZmxpcHBlZAogICAg
IC8vIGNhc2UuCiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJl
dHVybiBMYXlvdXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGhlaWdodCgpIC0gY2hpbGQt
PnJlbmRlcmVyKCktPmhlaWdodCgpIC0gMiAqIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFy
Z2luKGNoaWxkKSk7Ci0gICAgcmV0dXJuIExheW91dFBvaW50KHBvaW50LngoKSArIHdpZHRoKCkg
LSBjaGlsZC0+cmVuZGVyZXIoKS0+d2lkdGgoKSAtIDIgKiB4UG9zaXRpb25Gb3JGbG9hdEluY2x1
ZGluZ01hcmdpbihjaGlsZCksIHBvaW50LnkoKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRQb2lu
dChwb2ludC54KCksIHBvaW50LnkoKSArIGhlaWdodCgpIC0gY2hpbGQtPnJlbmRlcmVyKCkuaGVp
Z2h0KCkgLSAyICogeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY2hpbGQpKTsKKyAg
ICByZXR1cm4gTGF5b3V0UG9pbnQocG9pbnQueCgpICsgd2lkdGgoKSAtIGNoaWxkLT5yZW5kZXJl
cigpLndpZHRoKCkgLSAyICogeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY2hpbGQp
LCBwb2ludC55KCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludEZsb2F0cyhQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBib29sIHByZXNl
cnZlUGhhc2UpCkBAIC0yNTk2LDI1ICsyNTk2LDI1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
RmxvYXRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgIGZvciAoRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKKyAgICBh
dXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9h
dGluZ09iamVjdCogciA9IGl0LT5nZXQoKTsKICAgICAgICAgLy8gT25seSBwYWludCB0aGUgb2Jq
ZWN0IGlmIG91ciBtX3Nob3VsZFBhaW50IGZsYWcgaXMgc2V0LgotICAgICAgICBpZiAoci0+c2hv
dWxkUGFpbnQoKSAmJiAhci0+cmVuZGVyZXIoKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewor
ICAgICAgICBpZiAoci0+c2hvdWxkUGFpbnQoKSAmJiAhci0+cmVuZGVyZXIoKS5oYXNTZWxmUGFp
bnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICBQYWludEluZm8gY3VycmVudFBhaW50SW5mbyhw
YWludEluZm8pOwogICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IHByZXNlcnZl
UGhhc2UgPyBwYWludEluZm8ucGhhc2UgOiBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kOwogICAg
ICAgICAgICAgLy8gRklYTUU6IExheW91dFBvaW50IHZlcnNpb24gb2YgeFBvc2l0aW9uRm9yRmxv
YXRJbmNsdWRpbmdNYXJnaW4gd291bGQgbWFrZSB0aGlzIG11Y2ggY2xlYW5lci4KLSAgICAgICAg
ICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZUZvckNo
aWxkKHIsIExheW91dFBvaW50KHBhaW50T2Zmc2V0LngoKSArIHhQb3NpdGlvbkZvckZsb2F0SW5j
bHVkaW5nTWFyZ2luKHIpIC0gci0+cmVuZGVyZXIoKS0+eCgpLCBwYWludE9mZnNldC55KCkgKyB5
UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPnJlbmRlcmVyKCktPnkoKSkp
OwotICAgICAgICAgICAgci0+cmVuZGVyZXIoKS0+cGFpbnQoY3VycmVudFBhaW50SW5mbywgY2hp
bGRQb2ludCk7CisgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZsb2F0
Rm9yV3JpdGluZ01vZGVGb3JDaGlsZChyLCBMYXlvdXRQb2ludChwYWludE9mZnNldC54KCkgKyB4
UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPnJlbmRlcmVyKCkueCgpLCBw
YWludE9mZnNldC55KCkgKyB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHIt
PnJlbmRlcmVyKCkueSgpKSk7CisgICAgICAgICAgICByLT5yZW5kZXJlcigpLnBhaW50KGN1cnJl
bnRQYWludEluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVBoYXNl
KSB7CiAgICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VD
aGlsZEJsb2NrQmFja2dyb3VuZHM7Ci0gICAgICAgICAgICAgICAgci0+cmVuZGVyZXIoKS0+cGFp
bnQoY3VycmVudFBhaW50SW5mbywgY2hpbGRQb2ludCk7CisgICAgICAgICAgICAgICAgci0+cmVu
ZGVyZXIoKS5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsKICAgICAgICAgICAg
ICAgICBjdXJyZW50UGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZsb2F0OwotICAgICAgICAg
ICAgICAgIHItPnJlbmRlcmVyKCktPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQp
OworICAgICAgICAgICAgICAgIHItPnJlbmRlcmVyKCkucGFpbnQoY3VycmVudFBhaW50SW5mbywg
Y2hpbGRQb2ludCk7CiAgICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IFBh
aW50UGhhc2VGb3JlZ3JvdW5kOwotICAgICAgICAgICAgICAgIHItPnJlbmRlcmVyKCktPnBhaW50
KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQpOworICAgICAgICAgICAgICAgIHItPnJlbmRl
cmVyKCkucGFpbnQoY3VycmVudFBhaW50SW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgICAgICAg
ICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VPdXRsaW5lOwotICAgICAgICAg
ICAgICAgIHItPnJlbmRlcmVyKCktPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQp
OworICAgICAgICAgICAgICAgIHItPnJlbmRlcmVyKCkucGFpbnQoY3VycmVudFBhaW50SW5mbywg
Y2hpbGRQb2ludCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yODI1LDEy
ICsyODI1LDEyIEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJs
b2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByCiAgICAgICAgICAgICAgICAgY2xp
cE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5mbywgTGF5b3V0UG9pbnQoY2ItPngoKSwgY2It
PnkoKSksIGNiLT5wb3NpdGlvbmVkT2JqZWN0cygpKTsgLy8gRklYTUU6IE5vdCByaWdodCBmb3Ig
ZmxpcHBlZCB3cml0aW5nIG1vZGVzLgogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsK
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAgICAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9
ICppdDsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IGl0LT5n
ZXQoKTsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGZsb2F0Qm94KG9mZnNldEZyb21Sb290
QmxvY2sud2lkdGgoKSArIHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3RCbG9jay5oZWln
aHQoKSArIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgci0+cmVuZGVyZXIoKS0+d2lkdGgoKSwgci0+cmVuZGVy
ZXIoKS0+aGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+
cmVuZGVyZXIoKS53aWR0aCgpLCByLT5yZW5kZXJlcigpLmhlaWdodCgpKTsKICAgICAgICAgICAg
ICAgICByb290QmxvY2stPmZsaXBGb3JXcml0aW5nTW9kZShmbG9hdEJveCk7CiAgICAgICAgICAg
ICAgICAgZmxvYXRCb3gubW92ZShyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLngoKSwgcm9vdEJs
b2NrUGh5c2ljYWxQb3NpdGlvbi55KCkpOwogICAgICAgICAgICAgICAgIHBhaW50SW5mby0+Y29u
dGV4dC0+Y2xpcE91dChwaXhlbFNuYXBwZWRJbnRSZWN0KGZsb2F0Qm94KSk7CkBAIC0zMjYzLDE0
ICszMjYzLDE0IEBAIEZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdP
YmplY3QoUmVuZGVyQm94KiBvKQogICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQg
dGhlIG9iamVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKICAgICAgICAgY29u
c3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVj
dHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRp
bmdPYmplY3RTZXQuZmluZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9y
PihvKTsKKyAgICAgICAgYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94
JiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4oKm8pOwogICAgICAgICBpZiAoaXQgIT0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gKml0OworICAgICAg
ICAgICAgcmV0dXJuIGl0LT5nZXQoKTsKICAgICB9CiAKICAgICAvLyBDcmVhdGUgdGhlIHNwZWNp
YWwgb2JqZWN0IGVudHJ5ICYgYXBwZW5kIGl0IHRvIHRoZSBsaXN0CiAKLSAgICBPd25QdHI8Rmxv
YXRpbmdPYmplY3Q+IG5ld09iaiA9IEZsb2F0aW5nT2JqZWN0OjpjcmVhdGUobyk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiBvYmplY3QgPSBGbG9hdGluZ09iamVjdDo6Y3Jl
YXRlKCpvKTsKICAgICAKICAgICAvLyBPdXIgbG9jYXRpb24gaXMgaXJyZWxldmFudCBpZiB3ZSdy
ZSB1bnNwbGl0dGFibGUgb3Igbm8gcGFnaW5hdGlvbiBpcyBpbiBlZmZlY3QuCiAgICAgLy8gSnVz
dCBnbyBhaGVhZCBhbmQgbGF5IG91dCB0aGUgZmxvYXQuCkBAIC0zMjg2LDIzICszMjg2LDIzIEBA
IEZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVy
Qm94KiBvKQogICAgICAgICBvLT5jb21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKHRo
aXMpOwogICAgIH0KIAotICAgIG5ld09iai0+c2V0TG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aEZv
ckNoaWxkKG8pICsgbWFyZ2luU3RhcnRGb3JDaGlsZChvKSArIG1hcmdpbkVuZEZvckNoaWxkKG8p
LCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICBvYmplY3QtPnNldExvZ2ljYWxXaWR0
aChsb2dpY2FsV2lkdGhGb3JDaGlsZChvKSArIG1hcmdpblN0YXJ0Rm9yQ2hpbGQobykgKyBtYXJn
aW5FbmRGb3JDaGlsZChvKSwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CiAKICNpZiBFTkFC
TEUoQ1NTX1NIQVBFUykKICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0g
by0+c2hhcGVPdXRzaWRlSW5mbygpKQogICAgICAgICBzaGFwZU91dHNpZGUtPnNldFNoYXBlU2l6
ZShsb2dpY2FsV2lkdGhGb3JDaGlsZChvKSwgbG9naWNhbEhlaWdodEZvckNoaWxkKG8pKTsKICNl
bmRpZgogCi0gICAgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQobmV3T2JqLnJlbGVhc2Uo
KSk7CisgICAgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoc3RkOjptb3ZlKG9iamVjdCkp
OwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gq
IG8pCiB7CiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAgIGNvbnN0IEZsb2F0
aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmZpbmQ8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4obyk7Cisg
ICAgICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRlckJveCYsIEZsb2F0
aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpvKTsKICAgICAgICAgaWYgKGl0ICE9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsK
KyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQtPmdldCgpOwogICAgICAgICAgICAg
aWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxUb3AgPSByLT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwogICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IHItPmxvZ2ljYWxCb3R0b20oaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CkBAIC0zMzM4LDE4ICszMzM4LDE4IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KEZsb2F0aW5nT2JqZWN0KiBsYXN0
RmxvYXQsIGludCBsb2dpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBjb25zdCBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
Ci0gICAgRmxvYXRpbmdPYmplY3QqIGN1cnIgPSBmbG9hdGluZ09iamVjdFNldC5sYXN0KCk7Cisg
ICAgRmxvYXRpbmdPYmplY3QqIGN1cnIgPSBmbG9hdGluZ09iamVjdFNldC5sYXN0KCkuZ2V0KCk7
CiAgICAgd2hpbGUgKGN1cnIgIT0gbGFzdEZsb2F0ICYmICghY3Vyci0+aXNQbGFjZWQoKSB8fCBj
dXJyLT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID49IGxvZ2ljYWxPZmZz
ZXQpKSB7CiAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoY3Vycik7CiAgICAgICAg
IGlmIChmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKTsKKyAgICAgICAgY3VyciA9IGZs
b2F0aW5nT2JqZWN0U2V0Lmxhc3QoKS5nZXQoKTsKICAgICB9CiB9CiAKIExheW91dFBvaW50IFJl
bmRlckJsb2NrOjpjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdP
YmplY3QqIGZsb2F0aW5nT2JqZWN0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQpIGNvbnN0
CiB7Ci0gICAgUmVuZGVyQm94KiBjaGlsZEJveCA9IGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigp
OworICAgIFJlbmRlckJveCogY2hpbGRCb3ggPSAmZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCk7
CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
Q29udGVudChsb2dpY2FsVG9wT2Zmc2V0KTsgLy8gQ29uc3RhbnQgcGFydCBvZiBsZWZ0IG9mZnNl
dC4KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldDsgLy8gQ29uc3RhbnQgcGFydCBv
ZiByaWdodCBvZmZzZXQuCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCkBAIC0zNDMyLDE0ICszNDMy
LDE0IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAvLyBNb3Zl
IGJhY2t3YXJkcyB0aHJvdWdoIG91ciBmbG9hdGluZyBvYmplY3QgbGlzdCB1bnRpbCB3ZSBmaW5k
IGEgZmxvYXQgdGhhdCBoYXMKICAgICAvLyBhbHJlYWR5IGJlZW4gcG9zaXRpb25lZC4gIFRoZW4g
d2UnbGwgYmUgYWJsZSB0byBtb3ZlIGZvcndhcmQsIHBvc2l0aW9uaW5nIGFsbCBvZgogICAgIC8v
IHRoZSBuZXcgZmxvYXRzIHRoYXQgbmVlZCBpdC4KLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgYXV0byBpdCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOwogICAgIC0taXQ7IC8vIEdvIHRvIGxhc3QgaXRlbS4KLSAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsK
KyAgICBhdXRvIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICBGbG9hdGlu
Z09iamVjdCogbGFzdFBsYWNlZEZsb2F0aW5nT2JqZWN0ID0gMDsKICAgICB3aGlsZSAoaXQgIT0g
YmVnaW4pIHsKICAgICAgICAgLS1pdDsKICAgICAgICAgaWYgKCgqaXQpLT5pc1BsYWNlZCgpKSB7
Ci0gICAgICAgICAgICBsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3QgPSAqaXQ7CisgICAgICAgICAg
ICBsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7CiAgICAgICAgICAgICArK2l0
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM0NTEsMTYgKzM0NTEsMTYgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgIGlmIChsYXN0UGxhY2Vk
RmxvYXRpbmdPYmplY3QpCiAgICAgICAgIGxvZ2ljYWxUb3AgPSBtYXgobGFzdFBsYWNlZEZsb2F0
aW5nT2JqZWN0LT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpLCBsb2dpY2Fs
VG9wKTsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmpl
Y3RTZXQuZW5kKCk7CisgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAg
ICAvLyBOb3cgd2FsayB0aHJvdWdoIHRoZSBzZXQgb2YgdW5wb3NpdGlvbmVkIGZsb2F0cyBhbmQg
cGxhY2UgdGhlbS4KICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3Qq
IGZsb2F0aW5nT2JqZWN0ID0gaXQtPmdldCgpOwogICAgICAgICAvLyBUaGUgY29udGFpbmluZyBi
bG9jayBpcyByZXNwb25zaWJsZSBmb3IgcG9zaXRpb25pbmcgZmxvYXRzLCBzbyBpZiB3ZSBoYXZl
IGZsb2F0cyBpbiBvdXIKICAgICAgICAgLy8gbGlzdCB0aGF0IGNvbWUgZnJvbSBzb21ld2hlcmUg
ZWxzZSwgZG8gbm90IGF0dGVtcHQgdG8gcG9zaXRpb24gdGhlbS4KLSAgICAgICAgaWYgKGZsb2F0
aW5nT2JqZWN0LT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKSAhPSB0aGlzKQorICAgICAg
ICBpZiAoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkuY29udGFpbmluZ0Jsb2NrKCkgIT0gdGhp
cykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFJlbmRlckJveCogY2hpbGRCb3gg
PSBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsKKyAgICAgICAgUmVuZGVyQm94KiBjaGlsZEJv
eCA9ICZmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsKIAogICAgICAgICBMYXlvdXRVbml0IGNo
aWxkTG9naWNhbExlZnRNYXJnaW4gPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBtYXJnaW5TdGFydEZvckNoaWxkKGNoaWxkQm94KSA6IG1hcmdpbkVuZEZvckNoaWxkKGNoaWxk
Qm94KTsKIApAQCAtMzc0NCw5ICszNzQ0LDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bmV4
dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KExheW91dFVuaXQgbG9naWNhbEhlaWdodCkgY28KIAog
ICAgIExheW91dFVuaXQgYm90dG9tID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRp
bmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZsb2F0aW5n
T2JqZWN0KiByID0gKml0OworICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7
CisgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQtPmdldCgpOwogICAgICAg
ICBMYXlvdXRVbml0IGZsb2F0Qm90dG9tID0gci0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKTsKICAgICAgICAgaWYgKGZsb2F0Qm90dG9tID4gbG9naWNhbEhlaWdodCkK
ICAgICAgICAgICAgIGJvdHRvbSA9IG1pbihmbG9hdEJvdHRvbSwgYm90dG9tKTsKQEAgLTM3NjEs
OSArMzc2MSw5IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Omxvd2VzdEZsb2F0TG9naWNhbEJv
dHRvbShGbG9hdGluZ09iamVjdDo6VHlwZSBmbG9hdFR5cGUpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIExheW91dFVuaXQgbG93ZXN0RmxvYXRCb3R0b20gPSAwOwogICAgIGNvbnN0IEZsb2F0aW5n
T2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsK
LSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVu
ZCgpOwotICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGbG9hdGluZ09iamVj
dCogciA9ICppdDsKKyAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAg
IGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IGl0LT5nZXQoKTsKICAgICAgICAgaWYg
KHItPmlzUGxhY2VkKCkgJiYgci0+dHlwZSgpICYgZmxvYXRUeXBlKQogICAgICAgICAgICAgbG93
ZXN0RmxvYXRCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRCb3R0b20sIHItPmxvZ2ljYWxCb3R0b20o
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOwogICAgIH0KQEAgLTM4MDAsMTYgKzM4MDAsMTYg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxv
Y2sqIGNoaWxkLCBib29sIG1ha2VDaGlsZFAKIAogICAgIC8vIEZsb2F0cyB0aGF0IHdpbGwgcmVt
YWluIHRoZSBjaGlsZCdzIHJlc3BvbnNpYmlsaXR5IHRvIHBhaW50IHNob3VsZCBmYWN0b3IgaW50
byBpdHMKICAgICAvLyBvdmVyZmxvdy4KLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGNo
aWxkRW5kID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5lbmQoKTsKLSAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgY2hpbGRJdCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCkuYmVnaW4oKTsgY2hpbGRJdCAhPSBjaGlsZEVuZDsgKytjaGlsZEl0KSB7Ci0g
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKmNoaWxkSXQ7CisgICAgYXV0byBjaGlsZEVuZCA9
IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuZW5kKCk7CisgICAgZm9yIChhdXRvIGNo
aWxkSXQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmJlZ2luKCk7IGNoaWxkSXQg
IT0gY2hpbGRFbmQ7ICsrY2hpbGRJdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IGNo
aWxkSXQtPmdldCgpOwogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdCA9
IG1pbihyLT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpLCBMYXlvdXRV
bml0OjptYXgoKSAtIGNoaWxkTG9naWNhbFRvcCk7CiAgICAgICAgIExheW91dFVuaXQgbG9naWNh
bEJvdHRvbSA9IGNoaWxkTG9naWNhbFRvcCArIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdDsKICAgICAg
ICAgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tID0gbWF4KGxvd2VzdEZsb2F0TG9naWNhbEJvdHRv
bSwgbG9naWNhbEJvdHRvbSk7CiAKICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0b20gPiBsb2dpY2Fs
SGVpZ2h0KCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgaXMgbm90IGluIHRoZSBs
aXN0LCB3ZSBhZGQgaXQgbm93LgotICAgICAgICAgICAgaWYgKCFjb250YWluc0Zsb2F0KHItPnJl
bmRlcmVyKCkpKSB7CisgICAgICAgICAgICBpZiAoIWNvbnRhaW5zRmxvYXQoJnItPnJlbmRlcmVy
KCkpKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gTGF5b3V0U2l6ZSgtY2hpbGRMb2dpY2FsTGVmdCwgLWNoaWxkTG9naWNh
bFRvcCkgOiBMYXlvdXRTaXplKC1jaGlsZExvZ2ljYWxUb3AsIC1jaGlsZExvZ2ljYWxMZWZ0KTsK
ICAgICAgICAgICAgICAgICBib29sIHNob3VsZFBhaW50ID0gZmFsc2U7CiAKQEAgLTM4MTcsNyAr
MzgxNyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5nRmxvYXRzKFJl
bmRlckJsb2NrKiBjaGlsZCwgYm9vbCBtYWtlQ2hpbGRQCiAgICAgICAgICAgICAgICAgLy8gYmVo
YXZlcyBwcm9wZXJseSkuICBXZSBhbHdheXMgd2FudCB0byBwcm9wYWdhdGUgdGhlIGRlc2lyZSB0
byBwYWludCB0aGUgZmxvYXQgYXMKICAgICAgICAgICAgICAgICAvLyBmYXIgb3V0IGFzIHdlIGNh
biwgdG8gdGhlIG91dGVybW9zdCBibG9jayB0aGF0IG92ZXJsYXBzIHRoZSBmbG9hdCwgc3RvcHBp
bmcgb25seQogICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhpdCBhIHNlbGYtcGFpbnRpbmcgbGF5
ZXIgYm91bmRhcnkuCi0gICAgICAgICAgICAgICAgaWYgKHItPnJlbmRlcmVyKCktPmVuY2xvc2lu
Z0Zsb2F0UGFpbnRpbmdMYXllcigpID09IGVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHItPnJlbmRlcmVyKCkuZW5jbG9zaW5nRmxvYXRQYWludGlu
Z0xheWVyKCkgPT0gZW5jbG9zaW5nRmxvYXRQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgci0+c2V0U2hvdWxkUGFpbnQoZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICBz
aG91bGRQYWludCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzgyOCw4ICszODI4LDgg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxv
Y2sqIGNoaWxkLCBib29sIG1ha2VDaGlsZFAKICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+YWRkKHItPmNvcHlUb05ld0NvbnRhaW5lcihvZmZzZXQsIHNob3VsZFBhaW50LCB0cnVl
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobWFr
ZUNoaWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhci0+c2hvdWxkUGFpbnQoKSAmJiAhci0+cmVuZGVy
ZXIoKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKQotICAgICAgICAgICAgICAgICYmIHItPnJlbmRl
cmVyKCktPmlzRGVzY2VuZGFudE9mKGNoaWxkKSAmJiByLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdG
bG9hdFBhaW50aW5nTGF5ZXIoKSA9PSBjaGlsZC0+ZW5jbG9zaW5nRmxvYXRQYWludGluZ0xheWVy
KCkpIHsKKyAgICAgICAgICAgIGlmIChtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzICYmICFyLT5z
aG91bGRQYWludCgpICYmICFyLT5yZW5kZXJlcigpLmhhc1NlbGZQYWludGluZ0xheWVyKCkKKyAg
ICAgICAgICAgICAgICAmJiByLT5yZW5kZXJlcigpLmlzRGVzY2VuZGFudE9mKGNoaWxkKSAmJiBy
LT5yZW5kZXJlcigpLmVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpID09IGNoaWxkLT5lbmNs
b3NpbmdGbG9hdFBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBmbG9h
dCBpcyBub3Qgb3ZlcmhhbmdpbmcgZnJvbSB0aGlzIGJsb2NrLCBzbyBpZiBpdCBpcyBhIGRlc2Nl
bmRhbnQgb2YgdGhlIGNoaWxkLCB0aGUgY2hpbGQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8g
cGFpbnQgaXQgKHRoZSBvdGhlciBjYXNlIGlzIHRoYXQgaXQgaXMgaW50cnVkaW5nIGludG8gdGhl
IGNoaWxkKSwgdW5sZXNzIGl0IGhhcyBpdHMgb3duIGxheWVyIG9yIGVuY2xvc2luZwogICAgICAg
ICAgICAgICAgIC8vIGxheWVyLgpAQCAtMzg0MSw3ICszODQxLDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIGNoaWxkLCBib29sIG1h
a2VDaGlsZFAKICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBmbG9hdCBkb2Vzbid0IG92ZXJoYW5n
LCBpdCBkaWRuJ3QgZ2V0IHB1dCBpbnRvIG91ciBsaXN0LiAgV2UgbmVlZCB0byBnbyBhaGVhZCBh
bmQgYWRkIGl0cyBvdmVyZmxvdyBpbiB0byB0aGUKICAgICAgICAgICAgIC8vIGNoaWxkIG5vdy4K
ICAgICAgICAgICAgIGlmIChyLT5pc0Rlc2NlbmRhbnQoKSkKLSAgICAgICAgICAgICAgICBjaGls
ZC0+YWRkT3ZlcmZsb3dGcm9tQ2hpbGQoci0+cmVuZGVyZXIoKSwgTGF5b3V0U2l6ZSh4UG9zaXRp
b25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdN
YXJnaW4ocikpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+YWRkT3ZlcmZsb3dGcm9tQ2hpbGQo
JnItPnJlbmRlcmVyKCksIExheW91dFNpemUoeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJn
aW4ociksIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpKSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgcmV0dXJuIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbTsKQEAgLTM4NTMsNyAr
Mzg1Myw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhhc092ZXJoYW5naW5nRmxvYXQoUmVuZGVyQm94
KiByZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwot
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5k
PFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KHJlbmRlcmVyKTsKKyAg
ICBhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxSZW5kZXJCb3gmLCBGbG9hdGluZ09i
amVjdEhhc2hUcmFuc2xhdG9yPigqcmVuZGVyZXIpOwogICAgIGlmIChpdCA9PSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zODcxLDExICszODcx
LDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyhSZW5kZXJCbG9jayog
cHJldiwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mCiAgICAgbG9naWNhbExlZnRPZmZzZXQgKz0g
bWFyZ2luTG9naWNhbExlZnQoKTsKIAogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBwcmV2
U2V0ID0gcHJldi0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgcHJldkVuZCA9IHByZXZTZXQuZW5kKCk7Ci0gICAgZm9yIChGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIHByZXZJdCA9IHByZXZTZXQuYmVnaW4oKTsgcHJldkl0ICE9IHByZXZF
bmQ7ICsrcHJldkl0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKnByZXZJdDsKKyAg
ICBhdXRvIHByZXZFbmQgPSBwcmV2U2V0LmVuZCgpOworICAgIGZvciAoYXV0byBwcmV2SXQgPSBw
cmV2U2V0LmJlZ2luKCk7IHByZXZJdCAhPSBwcmV2RW5kOyArK3ByZXZJdCkgeworICAgICAgICBG
bG9hdGluZ09iamVjdCogciA9IHByZXZJdC0+Z2V0KCk7CiAgICAgICAgIGlmIChyLT5sb2dpY2Fs
Qm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID4gbG9naWNhbFRvcE9mZnNldCkgewot
ICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cyB8fCAhbV9mbG9hdGluZ09iamVjdHMt
PnNldCgpLmNvbnRhaW5zKHIpKSB7CisgICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3Rz
IHx8ICFtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuY29udGFpbnM8RmxvYXRpbmdPYmplY3QmLCBG
bG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigqcikpIHsKICAgICAgICAgICAgICAgICAvLyBX
ZSBjcmVhdGUgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGxhemlseS4KICAgICAgICAgICAgICAg
ICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICAgICAgICAgICAgICBjcmVhdGVGbG9h
dGluZ09iamVjdHMoKTsKQEAgLTM5MDMsNyArMzkwMyw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmF2
b2lkc0Zsb2F0cygpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQoUmVu
ZGVyQm94KiByZW5kZXJlcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMg
JiYgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmNvbnRhaW5zPFJlbmRlckJveCosIEZsb2F0aW5n
T2JqZWN0SGFzaFRyYW5zbGF0b3I+KHJlbmRlcmVyKTsKKyAgICByZXR1cm4gbV9mbG9hdGluZ09i
amVjdHMgJiYgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmNvbnRhaW5zPFJlbmRlckJveCYsIEZs
b2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpyZW5kZXJlcik7CiB9CiAKIHZvaWQgUmVuZGVy
QmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBm
bG9hdFRvUmVtb3ZlLCBib29sIGluTGF5b3V0KQpAQCAtMzkzNSwxNSArMzkzNSwxNSBAQCB2b2lk
IFJlbmRlckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRlckJveCog
ZmxvYXRUb1JlbW92ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgRmxvYXRpbmdPYmpl
Y3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7
CisgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKIAogICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHRT
aWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFuZXh0LT5pc1JlbmRlckJsb2NrKCkgfHwgbmV4dC0+
aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IHRvUmVuZGVyQmxvY2sobmV4dCkt
PmF2b2lkc0Zsb2F0cygpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgUmVuZGVy
QmxvY2sqIG5leHRCbG9jayA9IHRvUmVuZGVyQmxvY2sobmV4dCk7Ci0gICAgICAgIGZvciAoRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUmVuZGVyQm94KiBmbG9hdGluZ0JveCA9ICgq
aXQpLT5yZW5kZXJlcigpOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNl
dC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCogZmxv
YXRpbmdCb3ggPSAmKCppdCktPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAoZmxvYXRUb1Jl
bW92ZSAmJiBmbG9hdGluZ0JveCAhPSBmbG9hdFRvUmVtb3ZlKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgaWYgKG5leHRCbG9jay0+Y29udGFpbnNGbG9hdChmbG9hdGlu
Z0JveCkpCkBAIC0zOTgzLDcgKzM5ODMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVMb2Nh
bEZsb2F0aW5nT2JqZWN0c0ZvclBhaW50aW5nQ29udGFpbmVyKFJlbmRlckJveCogZmxvYQogICAg
IEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAg
ICAgICAgcmV0dXJuOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXRlcmF0b3IgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuZmluZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhh
c2hUcmFuc2xhdG9yPihmbG9hdFRvVXBkYXRlKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpLmZpbmQ8UmVuZGVyQm94JiwgRmxvYXRpbmdPYmplY3RIYXNoVHJh
bnNsYXRvcj4oKmZsb2F0VG9VcGRhdGUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCkuZW5kKCkpIHsKICAgICAgICAgYm9vbCBzaG91bGRQYWludCA9ICFmb3Vu
ZFBhaW50Q29udGFpbmVyICYmICFmbG9hdFRvVXBkYXRlLT5oYXNTZWxmUGFpbnRpbmdMYXllcigp
ICYmIGZsb2F0VG9VcGRhdGUtPmVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpID09IGVuY2xv
c2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpOwogICAgICAgICBmb3VuZFBhaW50Q29udGFpbmVyIHw9
IHNob3VsZFBhaW50OwpAQCAtNDE3NywxNSArNDE3NywxNSBAQCBib29sIFJlbmRlckJsb2NrOjpo
aXRUZXN0RmxvYXRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZQogICAgICAgICBhZGp1c3RlZExvY2F0aW9uICs9IHRvTGF5b3V0U2l6ZSh0b1JlbmRlclZp
ZXcoKnRoaXMpLmZyYW1lVmlldygpLnNjcm9sbFBvc2l0aW9uKCkpOwogCiAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBmbG9hdGluZ09iamVj
dFNldC5iZWdpbigpOwotICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmVuZCgpOyBpdCAhPSBiZWdpbjspIHsKKyAgICBhdXRvIGJlZ2luID0g
ZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsgaXQgIT0gYmVnaW47KSB7CiAgICAgICAgIC0taXQ7Ci0gICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKLSAgICAgICAgaWYgKGZsb2F0aW5n
T2JqZWN0LT5zaG91bGRQYWludCgpICYmICFmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS0+aGFz
U2VsZlBhaW50aW5nTGF5ZXIoKSkgewotICAgICAgICAgICAgTGF5b3V0VW5pdCB4T2Zmc2V0ID0g
eFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QpIC0gZmxvYXRp
bmdPYmplY3QtPnJlbmRlcmVyKCktPngoKTsKLSAgICAgICAgICAgIExheW91dFVuaXQgeU9mZnNl
dCA9IHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGZsb2F0aW5nT2JqZWN0KSAtIGZs
b2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLT55KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
bG9hdGluZ09iamVjdCA9IGl0LT5nZXQoKTsKKyAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5z
aG91bGRQYWludCgpICYmICFmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5oYXNTZWxmUGFpbnRp
bmdMYXllcigpKSB7CisgICAgICAgICAgICBMYXlvdXRVbml0IHhPZmZzZXQgPSB4UG9zaXRpb25G
b3JGbG9hdEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdCkgLSBmbG9hdGluZ09iamVjdC0+
cmVuZGVyZXIoKS54KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IHlPZmZzZXQgPSB5UG9zaXRp
b25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdCkgLSBmbG9hdGluZ09iamVj
dC0+cmVuZGVyZXIoKS55KCk7CiAgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0g
ZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGVGb3JDaGlsZChmbG9hdGluZ09iamVjdCwgYWRqdXN0ZWRM
b2NhdGlvbiArIExheW91dFNpemUoeE9mZnNldCwgeU9mZnNldCkpOwotICAgICAgICAgICAgaWYg
KGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgbG9j
YXRpb25JbkNvbnRhaW5lciwgY2hpbGRQb2ludCkpIHsKKyAgICAgICAgICAgIGlmIChmbG9hdGlu
Z09iamVjdC0+cmVuZGVyZXIoKS5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNv
bnRhaW5lciwgY2hpbGRQb2ludCkpIHsKICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGNo
aWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0K
QEAgLTYxMTAsMTMgKzYxMTAsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVy
Rml0KExheW91dFVuaXQgeCwgTGF5b3V0VW5pdCYgbGVmdCwgTGF5b3V0VW5pdCYKICAgICAgICAg
CiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OworICAgICAgICAgICAgYXV0
byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byBp
dCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQtPmdldCgpOwogICAgICAgICAgICAgICAg
IC8vIE9ubHkgZXhhbWluZSB0aGUgb2JqZWN0IGlmIG91ciBtX3Nob3VsZFBhaW50IGZsYWcgaXMg
c2V0LgogICAgICAgICAgICAgICAgIGlmIChyLT5zaG91bGRQYWludCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgZmxvYXRMZWZ0ID0geFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRp
bmdNYXJnaW4ocikgLSByLT5yZW5kZXJlcigpLT54KCk7Ci0gICAgICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgZmxvYXRSaWdodCA9IGZsb2F0TGVmdCArIHItPnJlbmRlcmVyKCktPndpZHRoKCk7
CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRMZWZ0ID0geFBvc2l0aW9uRm9y
RmxvYXRJbmNsdWRpbmdNYXJnaW4ocikgLSByLT5yZW5kZXJlcigpLngoKTsKKyAgICAgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCBmbG9hdFJpZ2h0ID0gZmxvYXRMZWZ0ICsgci0+cmVuZGVyZXIo
KS53aWR0aCgpOwogICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIGZsb2F0TGVm
dCk7CiAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBmbG9hdFJpZ2h0KTsK
ICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmlu
ZGV4IDk4YWQzZmFjYjI4ODBmMDVkNjRlOGI1MzYxZmE3Nzg5MGNiODRkMDAuLmI3Y2JkOWFkMzhk
M2IwOTJhNWMwMjRiNzNhZmU4ZDVlY2MzNTVjMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCkBAIC02MTcsMTcgKzYxNywxNyBAQCBwcml2YXRlOgogICAgIExheW91dFVu
aXQgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY29uc3QgRmxvYXRpbmdPYmplY3Qq
IGNoaWxkKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCi0gICAgICAgICAgICByZXR1cm4gY2hpbGQtPngoKSArIGNoaWxkLT5yZW5kZXJlcigpLT5t
YXJnaW5MZWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQtPngoKSArIGNoaWxkLT5yZW5k
ZXJlcigpLm1hcmdpbkxlZnQoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGNo
aWxkLT54KCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZC0+cmVuZGVyZXIoKSk7CisgICAg
ICAgICAgICByZXR1cm4gY2hpbGQtPngoKSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKCZjaGlsZC0+
cmVuZGVyZXIoKSk7CiAgICAgfQogICAgICAgICAKICAgICBMYXlvdXRVbml0IHlQb3NpdGlvbkZv
ckZsb2F0SW5jbHVkaW5nTWFyZ2luKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QK
ICAgICB7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkLT55KCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZC0+cmVuZGVy
ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQtPnkoKSArIG1hcmdpbkJlZm9yZUZvckNo
aWxkKCZjaGlsZC0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVy
biBjaGlsZC0+eSgpICsgY2hpbGQtPnJlbmRlcmVyKCktPm1hcmdpblRvcCgpOworICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkLT55KCkgKyBjaGlsZC0+cmVuZGVyZXIoKS5tYXJnaW5Ub3AoKTsKICAg
ICB9CiAKICAgICBMYXlvdXRQb2ludCBjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQoY29u
c3QgRmxvYXRpbmdPYmplY3QqLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCAwODAy
YTMxYTI0YWY3NTZjZGQ3NTdmNWQyMzI1YTMzYjUzOWMwNDdmLi4xOGI5ZmNhZjYxZDQ2MDlmYjAy
ZTYyNWRiZTFiZDA1OGU1MDJiYjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcApAQCAtOTIsMTEgKzkyLDExIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjpjbGVhckZsb2F0cygpCiAgICAgSGFzaFNldDxSZW5kZXJCb3gqPiBvbGRJbnRydWRpbmdGbG9h
dFNldDsKICAgICBpZiAoIWNoaWxkcmVuSW5saW5lKCkgJiYgbV9mbG9hdGluZ09iamVjdHMpIHsK
ICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICBmb3IgKEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICpp
dDsKKyAgICAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAgICAg
Zm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0
KCk7CiAgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkKLSAg
ICAgICAgICAgICAgICBvbGRJbnRydWRpbmdGbG9hdFNldC5hZGQoZmxvYXRpbmdPYmplY3QtPnJl
bmRlcmVyKCkpOworICAgICAgICAgICAgICAgIG9sZEludHJ1ZGluZ0Zsb2F0U2V0LmFkZCgmZmxv
YXRpbmdPYmplY3QtPnJlbmRlcmVyKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjAsMTAg
KzE2MCwxMCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9hdHMoKQogICAgICAgICBM
YXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0OjptaW4oKTsKICAgICAg
ICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09i
amVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0g
ICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmVuZCgpOwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0
ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7Ci0gICAgICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIG9sZEZsb2F0aW5nT2JqZWN0ID0gZmxvYXRNYXAuZ2V0KGYtPnJlbmRlcmVyKCkp
OworICAgICAgICAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAg
ICAgICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gaXQtPmdldCgp
OworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4gb2xkRmxv
YXRpbmdPYmplY3QgPSBmbG9hdE1hcC50YWtlKCZmLT5yZW5kZXJlcigpKTsKICAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBmLT5sb2dpY2FsQm90dG9tKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpOwogICAgICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09iamVj
dCkgewogICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxCb3R0b20gPSBv
bGRGbG9hdGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KTsKQEAgLTE4MywxMiArMTgzLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpjbGVhckZsb2F0
cygpCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICBmbG9hdE1hcC5yZW1vdmUoZi0+cmVuZGVyZXIoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCkg
JiYgIXNlbGZOZWVkc0xheW91dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Jm9sZEZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUoKS0+cmVuZGVyZXIoKSA9PSB0aGlz
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGlu
Z0xpbmUoKS0+bWFya0RpcnR5KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIG9sZEZsb2F0aW5nT2JqZWN0OwogICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20s
IGxvZ2ljYWxCb3R0b20pOwpAQCAtMTk2LDE1ICsxOTQsMTQgQEAgdm9pZCBSZW5kZXJCbG9ja0Zs
b3c6OmNsZWFyRmxvYXRzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIFJl
bmRlcmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0TWFwLmVuZCgpOwotICAg
ICAgICBmb3IgKFJlbmRlcmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGl0ID0gZmxvYXRNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCog
ZmxvYXRpbmdPYmplY3QgPSAoKml0KS52YWx1ZTsKKyAgICAgICAgYXV0byBlbmQgPSBmbG9hdE1h
cC5lbmQoKTsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRNYXAuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Qg
PSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rl
c2NlbmRhbnQoKSkgewogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwogICAg
ICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRv
bSwgZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhm
bG9hdE1hcCk7CiAKICAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoY2hhbmdlTG9n
aWNhbFRvcCwgY2hhbmdlTG9naWNhbEJvdHRvbSk7CiAgICAgfSBlbHNlIGlmICghb2xkSW50cnVk
aW5nRmxvYXRTZXQuaXNFbXB0eSgpKSB7CkBAIC0yMTQsOSArMjExLDkgQEAgdm9pZCBSZW5kZXJC
bG9ja0Zsb3c6OmNsZWFyRmxvYXRzKCkKICAgICAgICAgICAgIG1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kICYmICFvbGRJ
bnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCk7ICsraXQpCi0gICAgICAgICAgICAgICAgb2xkSW50
cnVkaW5nRmxvYXRTZXQucmVtb3ZlKCgqaXQpLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIGF1
dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8g
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQgJiYgIW9sZEludHJ1ZGlu
Z0Zsb2F0U2V0LmlzRW1wdHkoKTsgKytpdCkKKyAgICAgICAgICAgICAgICBvbGRJbnRydWRpbmdG
bG9hdFNldC5yZW1vdmUoJigqaXQpLT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgIGlmICghb2xk
SW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG1hcmtBbGxEZXNj
ZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCAyOTRlYTg4
MjQ0ZjUwNjFmYWQyMDM5OWFkZjMxNWFhM2JjYmY3MTYzLi5mYWU5MjQ0MTBmZDVkY2VjNWY0MjE0
ZDU2MTQxYzJlMjUwN2M1ZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtMTA3Miw3ICsxMDcyLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6YXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKEZsb2F0aW5nT2JqZWN0KiBm
bG9hdGluZ09iamVjdCkKIHsKICAgICBBU1NFUlQoIWZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGlu
Z0xpbmUoKSk7CiAgICAgZmxvYXRpbmdPYmplY3QtPnNldE9yaWdpbmF0aW5nTGluZShsYXN0Um9v
dEJveCgpKTsKLSAgICBsYXN0Um9vdEJveCgpLT5hcHBlbmRGbG9hdChmbG9hdGluZ09iamVjdC0+
cmVuZGVyZXIoKSk7CisgICAgbGFzdFJvb3RCb3goKS0+YXBwZW5kRmxvYXQoJmZsb2F0aW5nT2Jq
ZWN0LT5yZW5kZXJlcigpKTsKIH0KIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgQmlkaVN0
YXR1cyBjb25zdHJ1Y3RvciBvciBjcmVhdGUgbWV0aG9kLgpAQCAtMTI4MCw3ICsxMjgwLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxh
eW91dFN0YXRlLCBib29sIGhhc0lubGkKICAgICB9CiAKICAgICBpZiAoY29udGFpbnNGbG9hdHMo
KSkKLSAgICAgICAgbGF5b3V0U3RhdGUuc2V0TGFzdEZsb2F0KG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKS5sYXN0KCkpOworICAgICAgICBsYXlvdXRTdGF0ZS5zZXRMYXN0RmxvYXQobV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpLmxhc3QoKS5nZXQoKSk7CiAKICAgICAvLyBXZSBhbHNvIGZpbmQgdGhl
IGZpcnN0IGNsZWFuIGxpbmUgYW5kIGV4dHJhY3QgdGhlc2UgbGluZXMuICBXZSB3aWxsIGFkZCB0
aGVtIGJhY2sKICAgICAvLyBpZiB3ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBhYmxlIHRvIHN5bmNo
cm9uaXplIGFmdGVyIGhhbmRsaW5nIGFsbCBvdXIgZGlydHkgbGluZXMuCkBAIC0xNTM4LDcgKzE1
MzgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5l
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbgogCiAgICAgICAgIGNvbnN0IElubGluZUl0
ZXJhdG9yIG9sZEVuZCA9IGVuZDsKICAgICAgICAgYm9vbCBpc05ld1VCQVBhcmFncmFwaCA9IGxh
eW91dFN0YXRlLmxpbmVJbmZvKCkucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCk7Ci0gICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gKGNvbnRhaW5zRmxv
YXRzKCkpID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSA6IDA7CisgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gKGNvbnRhaW5zRmxvYXRz
KCkpID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKS5nZXQoKSA6IDA7CiAKICNpZiBF
TkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAgdXBkYXRlU2hhcGVBbmRTZWdtZW50c0ZvckN1cnJl
bnRMaW5lKHNoYXBlSW5zaWRlSW5mbywgbG9naWNhbE9mZnNldEZyb21TaGFwZUNvbnRhaW5lciwg
bGF5b3V0U3RhdGUpOwpAQCAtMTYzOCwyNCArMTYzOCwyNCBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJ
bmxpbgogCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0Um9vdEJveCgpKSB7
CiAgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKLSAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Cisg
ICAgICAgICAgICBhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKKyAgICAgICAg
ICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBpZiAo
bGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZChs
YXlvdXRTdGF0ZS5sYXN0RmxvYXQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBsYXN0RmxvYXRJ
dGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8RmxvYXRpbmdPYmplY3QmLCBGbG9hdGlu
Z09iamVjdEhhc2hUcmFuc2xhdG9yPigqbGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBlbmQpOwogICAgICAgICAgICAg
ICAgICsrbGFzdEZsb2F0SXRlcmF0b3I7CiAgICAgICAgICAgICAgICAgaXQgPSBsYXN0RmxvYXRJ
dGVyYXRvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKKyAgICAgICAg
ICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IGl0LT5nZXQoKTsKICAgICAgICAgICAgICAgICBh
cHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoZik7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KGYtPnJlbmRlcmVyKCkgPT0gbGF5b3V0U3RhdGUuZmxvYXRzKClbbGF5b3V0U3RhdGUuZmxvYXRJ
bmRleCgpXS5vYmplY3QpOworICAgICAgICAgICAgICAgIEFTU0VSVCgmZi0+cmVuZGVyZXIoKSA9
PSBsYXlvdXRTdGF0ZS5mbG9hdHMoKVtsYXlvdXRTdGF0ZS5mbG9hdEluZGV4KCldLm9iamVjdCk7
CiAgICAgICAgICAgICAgICAgLy8gSWYgYSBmbG9hdCdzIGdlb21ldHJ5IGhhcyBjaGFuZ2VkLCBn
aXZlIHVwIG9uIHN5bmNpbmcgd2l0aCBjbGVhbiBsaW5lcy4KICAgICAgICAgICAgICAgICBpZiAo
bGF5b3V0U3RhdGUuZmxvYXRzKClbbGF5b3V0U3RhdGUuZmxvYXRJbmRleCgpXS5yZWN0ICE9IGYt
PmZyYW1lUmVjdCgpKQogICAgICAgICAgICAgICAgICAgICBjaGVja0ZvckVuZExpbmVNYXRjaCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLnNldEZsb2F0SW5kZXgobGF5b3V0
U3RhdGUuZmxvYXRJbmRleCgpICsgMSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsYXlv
dXRTdGF0ZS5zZXRMYXN0RmxvYXQoIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSA/IGZsb2F0
aW5nT2JqZWN0U2V0Lmxhc3QoKSA6IDApOworICAgICAgICAgICAgbGF5b3V0U3RhdGUuc2V0TGFz
dEZsb2F0KCFmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkgPyBmbG9hdGluZ09iamVjdFNldC5s
YXN0KCkuZ2V0KCkgOiBudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIGxpbmVNaWRwb2lu
dFN0YXRlLnJlc2V0KCk7CkBAIC0xNzgzLDE3ICsxNzgzLDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmxpbmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAg
ICAgICB9CiAKICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0
U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKLSAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAg
ICAgYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CisgICAgICAgIGF1dG8gZW5k
ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5sYXN0
RmxvYXQoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBsYXN0Rmxv
YXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQobGF5b3V0U3RhdGUubGFzdEZsb2F0
KCkpOworICAgICAgICAgICAgYXV0byBsYXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0
U2V0LmZpbmQ8RmxvYXRpbmdPYmplY3QmLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigq
bGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpOwogICAgICAgICAgICAgQVNTRVJUKGxhc3RGbG9hdEl0
ZXJhdG9yICE9IGVuZCk7CiAgICAgICAgICAgICArK2xhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAg
ICAgICAgaXQgPSBsYXN0RmxvYXRJdGVyYXRvcjsKICAgICAgICAgfQogICAgICAgICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RM
aW5lKCppdCk7Ci0gICAgICAgIGxheW91dFN0YXRlLnNldExhc3RGbG9hdCghZmxvYXRpbmdPYmpl
Y3RTZXQuaXNFbXB0eSgpID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpIDogMCk7CisgICAgICAg
ICAgICBhcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoaXQtPmdldCgpKTsKKyAgICAgICAg
bGF5b3V0U3RhdGUuc2V0TGFzdEZsb2F0KCFmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkgPyBm
bG9hdGluZ09iamVjdFNldC5sYXN0KCkuZ2V0KCkgOiBudWxscHRyKTsKICAgICB9CiB9CiAKQEAg
LTIxMzksOSArMjEzOSw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmNoZWNrUGFnaW5hdGlvbkFuZEZs
b2F0c0F0RW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlCiAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpICsgYWJz
b2x1dGVWYWx1ZShsaW5lRGVsdGEpOwogCiAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgZm9y
IChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0Owor
ICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0
ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBmID0gaXQtPmdldCgpOwogICAgICAgICBpZiAoZi0+bG9naWNhbEJv
dHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSA+PSBsb2dpY2FsVG9wICYmIGYtPmxvZ2lj
YWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgPCBsb2dpY2FsQm90dG9tKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTM0MDMsNyArMzQwMyw3IEBAIGJvb2wg
UmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdPYmplY3QqIG5ld0Zs
b2F0LCBGbG9hdGluZ09iamVjCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwotICAgIEFTU0VSVChmbG9hdGluZ09iamVjdFNldC5sYXN0KCkgPT0gbmV3RmxvYXQpOwor
ICAgIEFTU0VSVChmbG9hdGluZ09iamVjdFNldC5sYXN0KCkuZ2V0KCkgPT0gbmV3RmxvYXQpOwog
CiAgICAgTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxUb3AgPSBuZXdGbG9hdC0+bG9naWNhbFRvcChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKICAgICBpbnQgcGFnaW5hdGlvblN0cnV0ID0gbmV3
RmxvYXQtPnBhZ2luYXRpb25TdHJ1dCgpOwpAQCAtMzQxMSwxNyArMzQxMSwxNyBAQCBib29sIFJl
bmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9h
dCwgRmxvYXRpbmdPYmplYwogICAgIGlmIChmbG9hdExvZ2ljYWxUb3AgLSBwYWdpbmF0aW9uU3Ry
dXQgIT0gbG9naWNhbEhlaWdodCgpICsgbGluZUluZm8uZmxvYXRQYWdpbmF0aW9uU3RydXQoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0
ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmVuZCgpOwogICAgIC0taXQ7IC8vIExhc3QgZmxvYXQgaXMgbmV3RmxvYXQsIHNraXAgdGhh
dCBvbmUuCi0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmJlZ2luKCk7CisgICAgYXV0byBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7CiAgICAgd2hpbGUgKGl0ICE9IGJlZ2luKSB7CiAgICAgICAgIC0taXQ7Ci0gICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBmID0gKml0OworICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IGl0LT5n
ZXQoKTsKICAgICAgICAgaWYgKGYgPT0gbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoZi0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKSA9PSBsb2dpY2FsSGVpZ2h0KCkgKyBsaW5lSW5mby5mbG9hdFBhZ2luYXRpb25T
dHJ1dCgpKSB7CiAgICAgICAgICAgICBmLT5zZXRQYWdpbmF0aW9uU3RydXQocGFnaW5hdGlvblN0
cnV0ICsgZi0+cGFnaW5hdGlvblN0cnV0KCkpOwotICAgICAgICAgICAgUmVuZGVyQm94KiBvID0g
Zi0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIFJlbmRlckJveCogbyA9ICZmLT5yZW5kZXJlcigp
OwogICAgICAgICAgICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKG8sIGxvZ2ljYWxUb3BGb3JDaGls
ZChvKSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKG8pICsgcGFnaW5hdGlvblN0cnV0KTsKICAgICAg
ICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkpCiAgICAgICAgICAgICAgICAgdG9SZW5kZXJC
bG9jayhvKS0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRoaXMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212428</attachid>
            <date>2013-09-23 22:47:19 -0700</date>
            <delta_ts>2013-09-23 22:52:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121823-20130923224718.patch</filename>
            <type>text/plain</type>
            <size>61223</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2MzE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWM0ODliOTAyZGZkYjcx
YjA5ODljNzY3YjQ3MGJlMDVhYjRkOGFkNC4uMjkxZmJjNGNjMDU2MmZjZWVlZGI3MjBkZWQ1OTUw
NDY3MzYwZDg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDEzLTA5LTIzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgdW5pcXVlX3B0ciBpbnN0
ZWFkIG9mIGRlbGV0ZUFsbFZhbHVlcyBpbiBGbG9hdGluZ09iamVjdCBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE4MjMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmluZy9GbG9hdGlu
Z09iamVjdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmNyZWF0ZSk6
IFJldHVybiBhIHVuaXF1ZV9wdHIgaW5zdGVhZCBvZiBQYXNzT3duUHRyLgorICAgICAgICBVc2Ug
YXV0byBhbmQgYSB3b3JkIGZvciB0aGUgbG9jYWwgdmFyaWFibGUgaW5zdGVhZCBvZiBhbiBhYmJy
ZXZpYXRpb24uIEFsc28KKyAgICAgICAgY2hhbmdlZCB0byB0YWtlIGEgcmVmZXJlbmNlIGluc3Rl
YWQgb2YgYSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6OmNvcHlU
b05ld0NvbnRhaW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3Q6
OnVuc2FmZUNsb25lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6
On5GbG9hdGluZ09iamVjdHMpOiBSZW1vdmVkIGNhbGwgdG8gZGVsZXRlQWxsVmFsdWVzLgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpjbGVhckxpbmVCb3hUcmVlUG9pbnRlcnMp
OiBVc2UgYXV0byB0byBtYWtlIHRoaXMKKyAgICAgICAgcmVhZCBjbGVhcmx5LgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpjbGVhcik6IFJlbW92ZWQgY2FsbCB0byBkZWxldGVB
bGxWYWx1ZXMuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6Om1vdmVBbGxUb0Zs
b2F0SW5mb01hcCk6IFVzZSBzdGQ6Om1vdmUgdG8gbW92ZSB2YWx1ZXMKKyAgICAgICAgb3V0IG9m
IHRoZSBzZXQsIGludG8gdGhlIG1hcC4gUmVtb3ZlZCBjb2RlIHRvIGNsZWFyIHRoZSBzZXQsIHNp
bmNlIGl0IHdhcyBhCisgICAgICAgIHRyaWNrIHRvIHByZXZlbnQgdGhlIHZhbHVlcyBmcm9tIGJl
aW5nIGRlbGV0ZWQgd2hlbiB0aGV5IHdlcmUgbm90IG1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6
RmxvYXRpbmdPYmplY3RzOjphZGQpOiBDaGFuZ2VkIHRvIHRha2UgYSB1bmlxdWVfcHRyIGFuZCB0
byBtb3ZlIHRoZQorICAgICAgICBwb2ludGVyIGludG8gdGhlIHNldCBpbnN0ZWFkIG9mIHVzaW5n
IGxlYWtQdHIuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZSk6IFJl
YXJyYW5nZWQgY29kZSBzbyB0aGF0IHRoZSByZW1vdmUgaXMgYXQKKyAgICAgICAgdGhlIGVuZCBv
ZiB0aGUgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGJlZ2lubmluZy4gQWxzbyBoYWQgdG8gdXNl
IGEgaGFzaAorICAgICAgICB0cmFuc2xhdG9yIGFuZCBhIGZpbmQvcmVtb3ZlIGNvbWJvIHNpbmNl
IHdlIGRvbid0IGhhdmUgaGFzaCB0cmFuc2xhdG9yIHZlcnNpb24KKyAgICAgICAgb2YgdGhlIHJl
bW92ZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6Y29tcHV0
ZVBsYWNlZEZsb2F0c1RyZWUpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIHRoZSB0
eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6cGxhY2VkRmxvYXRzVHJl
ZSk6IE1vdmVkIHRoaXMgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkCisgICAgICAgIG9mIGhhdmluZyBp
dCBpbiB0aGUgaGVhZGVyLCBzaW5jZSBpdCdzIG9ubHkgdXNlZCB3aXRoaW4gdGhlIGZpbGUuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmg6IENoYW5nZWQgZnVuY3Rpb25z
IHRvIHRha2UgcmVmZXJlbmNlcyBpbnN0ZWFkCisgICAgICAgIG9mIHBvaW50ZXJzIGFuZCByZXR1
cm4gdW5pcXVlX3B0ciBpbnN0ZWFkIG9mIFBhc3NPd25QdHIuIEFsc28gbWFkZQorICAgICAgICBj
b25zdHJ1Y3RvcnMgcHVibGljIHNvIHdlIGNhbiB1c2UgdGhlbSB3aXRoIG1ha2VfdW5pcXVlLiBD
aGFuZ2VkIHR5cGVzIHRvCisgICAgICAgIHVzZSB1bmlxdWVfcHRyIGluc3RlYWQgb2YgcmF3IHBv
aW50ZXJzLCBhbmQgbWFkZSB0aGUgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcgorICAgICAg
ICB3b3JrIGZvciBib3RoIFJlbmRlckJveCYgYW5kIEZsb2F0aW5nT2JqZWN0Ji4KKworICAgICAg
ICAqIHJlbmRlcmluZy9MaW5lV2lkdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRo
OjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQpOgorICAgICAgICBVcGRh
dGVkIGZvciBjaGFuZ2VzIHRvIHR5cGVzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bW92ZUFsbENoaWxkcmVuSW5jbHVkaW5n
RmxvYXRzVG8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJv
bUZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5n
aW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpjb250YWluc0Zsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxvYXRzRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjp1cGRhdGVMb2NhbEZsb2F0aW5nT2JqZWN0c0ZvclBhaW50aW5nQ29u
dGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQpOgorICAg
ICAgICBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvIHR5cGVzLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6
OmNsZWFyRmxvYXRzKTogVXBkYXRlZCB0byB1c2UgdGFrZSBpbnN0ZWFkIG9mCisgICAgICAgIGEg
Y29tYmluYXRpb24gb2YgcmVtb3ZlIGFuZCBkZWxldGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpsYXlvdXRSdW5zQW5kRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
YXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGlua1RvRW5kTGluZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpjaGVja1BhZ2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUpOgorICAgICAgICBVcGRhdGVkIGZv
ciBjaGFuZ2VzIHRvIHR5cGVzLgorCiAyMDEzLTA5LTIzICBHdXJwcmVldCBLYXVyICA8ay5ndXJw
cmVldEBzYW1zdW5nLmNvbT4KIAogICAgICAgICBDU1MgVW5pdCB2aCwgdncsIHZtaW4gYW5kIHZt
YXggaW4gYm94LXNoYWRvdyBhcmUgbm90IGFwcGxpZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9GbG9hdGluZ09iamVjdHMuY3BwCmluZGV4IGEzZjgyMDhhYWEzM2Q2ODJhODZkZGYwZTY0
ZWJmNDFmNGY4Y2M2OGMuLjY4N2UzZTg0N2IwZjI1M2M3OWQ3OTRhZjdjYWIwZjhlZTdkMDY3YjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCkBAIC00
Miw5ICs0Miw5IEBAIHN0cnVjdCBTYW1lU2l6ZUFzRmxvYXRpbmdPYmplY3QgewogCiBDT01QSUxF
X0FTU0VSVChzaXplb2YoRmxvYXRpbmdPYmplY3QpID09IHNpemVvZihTYW1lU2l6ZUFzRmxvYXRp
bmdPYmplY3QpLCBGbG9hdGluZ09iamVjdF9zaG91bGRfc3RheV9zbWFsbCk7CiAKLUZsb2F0aW5n
T2JqZWN0OjpGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIHJlbmRlcmVyKQorRmxvYXRpbmdPYmpl
Y3Q6OkZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCYgcmVuZGVyZXIpCiAgICAgOiBtX3JlbmRlcmVy
KHJlbmRlcmVyKQotICAgICwgbV9vcmlnaW5hdGluZ0xpbmUoMCkKKyAgICAsIG1fb3JpZ2luYXRp
bmdMaW5lKG51bGxwdHIpCiAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQogICAgICwgbV9zaG91
bGRQYWludCh0cnVlKQogICAgICwgbV9pc0Rlc2NlbmRhbnQoZmFsc2UpCkBAIC01Myw3ICs1Myw3
IEBAIEZsb2F0aW5nT2JqZWN0OjpGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIHJlbmRlcmVyKQog
ICAgICwgbV9pc0luUGxhY2VkVHJlZShmYWxzZSkKICNlbmRpZgogewotICAgIEVGbG9hdCB0eXBl
ID0gcmVuZGVyZXItPnN0eWxlKCktPmZsb2F0aW5nKCk7CisgICAgRUZsb2F0IHR5cGUgPSByZW5k
ZXJlci5zdHlsZSgpLT5mbG9hdGluZygpOwogICAgIEFTU0VSVCh0eXBlICE9IE5vRmxvYXQpOwog
ICAgIGlmICh0eXBlID09IExlZnRGbG9hdCkKICAgICAgICAgbV90eXBlID0gRmxvYXRMZWZ0OwpA
QCAtNjEsOSArNjEsOSBAQCBGbG9hdGluZ09iamVjdDo6RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94
KiByZW5kZXJlcikKICAgICAgICAgbV90eXBlID0gRmxvYXRSaWdodDsKIH0KIAotRmxvYXRpbmdP
YmplY3Q6OkZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogcmVuZGVyZXIsIFR5cGUgdHlwZSwgY29u
c3QgTGF5b3V0UmVjdCYgZnJhbWVSZWN0LCBib29sIHNob3VsZFBhaW50LCBib29sIGlzRGVzY2Vu
ZGFudCkKK0Zsb2F0aW5nT2JqZWN0OjpGbG9hdGluZ09iamVjdChSZW5kZXJCb3gmIHJlbmRlcmVy
LCBUeXBlIHR5cGUsIGNvbnN0IExheW91dFJlY3QmIGZyYW1lUmVjdCwgYm9vbCBzaG91bGRQYWlu
dCwgYm9vbCBpc0Rlc2NlbmRhbnQpCiAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQotICAgICwg
bV9vcmlnaW5hdGluZ0xpbmUoMCkKKyAgICAsIG1fb3JpZ2luYXRpbmdMaW5lKG51bGxwdHIpCiAg
ICAgLCBtX2ZyYW1lUmVjdChmcmFtZVJlY3QpCiAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQog
ICAgICwgbV90eXBlKHR5cGUpCkBAIC03NiwyNyArNzYsMjggQEAgRmxvYXRpbmdPYmplY3Q6OkZs
b2F0aW5nT2JqZWN0KFJlbmRlckJveCogcmVuZGVyZXIsIFR5cGUgdHlwZSwgY29uc3QgTGF5b3V0
UmVjdCYKIHsKIH0KIAotUGFzc093blB0cjxGbG9hdGluZ09iamVjdD4gRmxvYXRpbmdPYmplY3Q6
OmNyZWF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyKQorc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2Jq
ZWN0PiBGbG9hdGluZ09iamVjdDo6Y3JlYXRlKFJlbmRlckJveCYgcmVuZGVyZXIpCiB7Ci0gICAg
T3duUHRyPEZsb2F0aW5nT2JqZWN0PiBuZXdPYmogPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmpl
Y3QocmVuZGVyZXIpKTsKLSAgICBuZXdPYmotPnNldFNob3VsZFBhaW50KCFyZW5kZXJlci0+aGFz
U2VsZlBhaW50aW5nTGF5ZXIoKSk7IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQgd2ls
bCBwYWludCBpdHNlbGYuIE90aGVyd2lzZSBzb21lb25lIGVsc2Ugd2lsbC4KLSAgICBuZXdPYmot
PnNldElzRGVzY2VuZGFudCh0cnVlKTsKLQotICAgIHJldHVybiBuZXdPYmoucmVsZWFzZSgpOwor
ICAgIGF1dG8gb2JqZWN0ID0gc3RkOjptYWtlX3VuaXF1ZTxGbG9hdGluZ09iamVjdD4ocmVuZGVy
ZXIpOworICAgIG9iamVjdC0+c2V0U2hvdWxkUGFpbnQoIXJlbmRlcmVyLmhhc1NlbGZQYWludGlu
Z0xheWVyKCkpOyAvLyBJZiBhIGxheWVyIGV4aXN0cywgdGhlIGZsb2F0IHdpbGwgcGFpbnQgaXRz
ZWxmLiBPdGhlcndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCisgICAgb2JqZWN0LT5zZXRJc0Rlc2Nl
bmRhbnQodHJ1ZSk7CisgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotUGFzc093blB0cjxGbG9hdGlu
Z09iamVjdD4gRmxvYXRpbmdPYmplY3Q6OmNvcHlUb05ld0NvbnRhaW5lcihMYXlvdXRTaXplIG9m
ZnNldCwgYm9vbCBzaG91bGRQYWludCwgYm9vbCBpc0Rlc2NlbmRhbnQpIGNvbnN0CitzdGQ6OnVu
aXF1ZV9wdHI8RmxvYXRpbmdPYmplY3Q+IEZsb2F0aW5nT2JqZWN0Ojpjb3B5VG9OZXdDb250YWlu
ZXIoTGF5b3V0U2l6ZSBvZmZzZXQsIGJvb2wgc2hvdWxkUGFpbnQsIGJvb2wgaXNEZXNjZW5kYW50
KSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3QocmVuZGVy
ZXIoKSwgdHlwZSgpLCBMYXlvdXRSZWN0KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkgLSBvZmZzZXQs
IGZyYW1lUmVjdCgpLnNpemUoKSksIHNob3VsZFBhaW50LCBpc0Rlc2NlbmRhbnQpKTsKKyAgICAv
LyBGSVhNRTogVXNlIG1ha2VfdW5pcXVlIGhlcmUsIG9uY2Ugd2UgY2FuIGdldCBpdCB0byBjb21w
aWxlIG9uIGFsbCBwbGF0Zm9ybXMgd2Ugc3VwcG9ydC4KKyAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEZsb2F0aW5nT2JqZWN0PihuZXcgRmxvYXRpbmdPYmplY3QocmVuZGVyZXIoKSwgdHlwZSgp
LCBMYXlvdXRSZWN0KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkgLSBvZmZzZXQsIGZyYW1lUmVjdCgp
LnNpemUoKSksIHNob3VsZFBhaW50LCBpc0Rlc2NlbmRhbnQpKTsKIH0KIAotUGFzc093blB0cjxG
bG9hdGluZ09iamVjdD4gRmxvYXRpbmdPYmplY3Q6OnVuc2FmZUNsb25lKCkgY29uc3QKK3N0ZDo6
dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4gRmxvYXRpbmdPYmplY3Q6OnVuc2FmZUNsb25lKCkg
Y29uc3QKIHsKLSAgICBPd25QdHI8RmxvYXRpbmdPYmplY3Q+IGNsb25lT2JqZWN0ID0gYWRvcHRQ
dHIobmV3IEZsb2F0aW5nT2JqZWN0KHJlbmRlcmVyKCksIHR5cGUoKSwgbV9mcmFtZVJlY3QsIG1f
c2hvdWxkUGFpbnQsIG1faXNEZXNjZW5kYW50KSk7CisgICAgLy8gRklYTUU6IFVzZSBtYWtlX3Vu
aXF1ZSBoZXJlLCBvbmNlIHdlIGNhbiBnZXQgaXQgdG8gY29tcGlsZSBvbiBhbGwgcGxhdGZvcm1z
IHdlIHN1cHBvcnQuCisgICAgc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiBjbG9uZU9i
amVjdChuZXcgRmxvYXRpbmdPYmplY3QocmVuZGVyZXIoKSwgdHlwZSgpLCBtX2ZyYW1lUmVjdCwg
bV9zaG91bGRQYWludCwgbV9pc0Rlc2NlbmRhbnQpKTsKICAgICBjbG9uZU9iamVjdC0+bV9vcmln
aW5hdGluZ0xpbmUgPSBtX29yaWdpbmF0aW5nTGluZTsKICAgICBjbG9uZU9iamVjdC0+bV9wYWdp
bmF0aW9uU3RydXQgPSBtX3BhZ2luYXRpb25TdHJ1dDsKICAgICBjbG9uZU9iamVjdC0+bV9pc1Bs
YWNlZCA9IG1faXNQbGFjZWQ7Ci0gICAgcmV0dXJuIGNsb25lT2JqZWN0LnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gY2xvbmVPYmplY3Q7CiB9CiAKIHRlbXBsYXRlIDxGbG9hdGluZ09iamVjdDo6VHlw
ZSBGbG9hdFR5cGVWYWx1ZT4KQEAgLTE0OCwxNSArMTQ5LDEyIEBAIEZsb2F0aW5nT2JqZWN0czo6
RmxvYXRpbmdPYmplY3RzKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgYm9vbCBob3Jpem9u
dGFsV3JpCiAKIEZsb2F0aW5nT2JqZWN0czo6fkZsb2F0aW5nT2JqZWN0cygpCiB7Ci0gICAgLy8g
RklYTUU6IG1fc2V0IHNob3VsZCB1c2UgT3duUHRyIGluc3RlYWQuCi0gICAgZGVsZXRlQWxsVmFs
dWVzKG1fc2V0KTsKIH0KIAogdm9pZCBGbG9hdGluZ09iamVjdHM6OmNsZWFyTGluZUJveFRyZWVQ
b2ludGVycygpCiB7CiAgICAgLy8gQ2xlYXIgcmVmZXJlbmNlcyB0byBvcmlnaW5hdGluZyBsaW5l
cywgc2luY2UgdGhlIGxpbmVzIGFyZSBiZWluZyBkZWxldGVkCi0gICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgaXQgPSBtX3NldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBmb3Ig
KGF1dG8gaXQgPSBtX3NldC5iZWdpbigpLCBlbmQgPSBtX3NldC5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgIEFTU0VSVCghKCgqaXQpLT5vcmlnaW5hdGluZ0xpbmUoKSkgfHwgJigo
Kml0KS0+b3JpZ2luYXRpbmdMaW5lKCktPnJlbmRlcmVyKCkpID09IG1fcmVuZGVyZXIpOwogICAg
ICAgICAoKml0KS0+c2V0T3JpZ2luYXRpbmdMaW5lKDApOwogICAgIH0KQEAgLTE2NCw3ICsxNjIs
NiBAQCB2b2lkIEZsb2F0aW5nT2JqZWN0czo6Y2xlYXJMaW5lQm94VHJlZVBvaW50ZXJzKCkKIAog
dm9pZCBGbG9hdGluZ09iamVjdHM6OmNsZWFyKCkKIHsKLSAgICBkZWxldGVBbGxWYWx1ZXMobV9z
ZXQpOwogICAgIG1fc2V0LmNsZWFyKCk7CiAgICAgbV9wbGFjZWRGbG9hdHNUcmVlLmNsZWFyKCk7
CiAgICAgbV9sZWZ0T2JqZWN0c0NvdW50ID0gMDsKQEAgLTE3MywxNCArMTcwLDEzIEBAIHZvaWQg
RmxvYXRpbmdPYmplY3RzOjpjbGVhcigpCiAKIHZvaWQgRmxvYXRpbmdPYmplY3RzOjptb3ZlQWxs
VG9GbG9hdEluZm9NYXAoUmVuZGVyZXJUb0Zsb2F0SW5mb01hcCYgbWFwKQogewotICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7Ci0gICAgZm9yIChGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9zZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwotICAgICAgICBtYXAuYWRkKGYtPnJl
bmRlcmVyKCksIGYpOworICAgIGZvciAoYXV0byBpdCA9IG1fc2V0LmJlZ2luKCksIGVuZCA9IG1f
c2V0LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBp
dC0+Z2V0KCktPnJlbmRlcmVyKCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGUgb25seSByZWFzb24g
aXQgaXMgc2FmZSB0byBtb3ZlIHRoZXNlIG91dCBvZiB0aGUgc2V0IGlzIHRoYXQKKyAgICAgICAg
Ly8gd2UgYXJlIGFib3V0IHRvIGNsZWFyIGl0LiBPdGhlcndpc2UgaXQgd291bGQgYnJlYWsgdGhl
IGhhc2ggdGFibGUgaW52YXJpYW50LgorICAgICAgICAvLyBBIGNsZWFuIHdheSB0byBkbyB0aGlz
IHdvdWxkIGJlIHRvIGFkZCBhIHRha2VBbGwgZnVuY3Rpb24gdG8gSGFzaFNldC4KKyAgICAgICAg
bWFwLmFkZCgmcmVuZGVyZXIsIHN0ZDo6bW92ZSgqaXQpKTsKICAgICB9Ci0gICAgLy8gY2xlYXIg
c2V0IGJlZm9yZSBjbGVhcmluZyB0aGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWxldGUg
YWxsIG9mCi0gICAgLy8gdGhlIG9iamVjdHMgd2UgaGF2ZSBqdXN0IHRyYW5zZmVycmVkLgotICAg
IG1fc2V0LmNsZWFyKCk7CiAgICAgY2xlYXIoKTsKIH0KIApAQCAtMjM1LDI1ICsyMzEsMjYgQEAg
dm9pZCBGbG9hdGluZ09iamVjdHM6OnJlbW92ZVBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCog
ZmxvYXRpbmdPYmplY3QpCiAjZW5kaWYKIH0KIAotRmxvYXRpbmdPYmplY3QqIEZsb2F0aW5nT2Jq
ZWN0czo6YWRkKFBhc3NPd25QdHI8RmxvYXRpbmdPYmplY3Q+IGZsb2F0aW5nT2JqZWN0KQorRmxv
YXRpbmdPYmplY3QqIEZsb2F0aW5nT2JqZWN0czo6YWRkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGlu
Z09iamVjdD4gZmxvYXRpbmdPYmplY3QpCiB7Ci0gICAgRmxvYXRpbmdPYmplY3QqIG5ld09iamVj
dCA9IGZsb2F0aW5nT2JqZWN0LmxlYWtQdHIoKTsKLSAgICBpbmNyZWFzZU9iamVjdHNDb3VudChu
ZXdPYmplY3QtPnR5cGUoKSk7Ci0gICAgbV9zZXQuYWRkKG5ld09iamVjdCk7Ci0gICAgaWYgKG5l
d09iamVjdC0+aXNQbGFjZWQoKSkKLSAgICAgICAgYWRkUGxhY2VkT2JqZWN0KG5ld09iamVjdCk7
Ci0gICAgcmV0dXJuIG5ld09iamVjdDsKKyAgICBpbmNyZWFzZU9iamVjdHNDb3VudChmbG9hdGlu
Z09iamVjdC0+dHlwZSgpKTsKKyAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkpCisg
ICAgICAgIGFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdC5nZXQoKSk7CisgICAgcmV0dXJu
IG1fc2V0LmFkZChzdGQ6Om1vdmUoZmxvYXRpbmdPYmplY3QpKS5pdGVyYXRvci0+Z2V0KCk7CiB9
CiAKIHZvaWQgRmxvYXRpbmdPYmplY3RzOjpyZW1vdmUoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5n
T2JqZWN0KQogeworICAgIEFTU0VSVCgobV9zZXQuY29udGFpbnM8RmxvYXRpbmdPYmplY3QmLCBG
bG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigqZmxvYXRpbmdPYmplY3QpKSk7CiAgICAgZGVj
cmVhc2VPYmplY3RzQ291bnQoZmxvYXRpbmdPYmplY3QtPnR5cGUoKSk7Ci0gICAgbV9zZXQucmVt
b3ZlKGZsb2F0aW5nT2JqZWN0KTsKICAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2Vk
KCkgfHwgIWZsb2F0aW5nT2JqZWN0LT5pc0luUGxhY2VkVHJlZSgpKTsKICAgICBpZiAoZmxvYXRp
bmdPYmplY3QtPmlzUGxhY2VkKCkpCiAgICAgICAgIHJlbW92ZVBsYWNlZE9iamVjdChmbG9hdGlu
Z09iamVjdCk7CiAgICAgQVNTRVJUKCFmbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCkp
OwotICAgIGRlbGV0ZSBmbG9hdGluZ09iamVjdDsKKyAgICBhdXRvIGl0ID0gbV9zZXQuZmluZDxG
bG9hdGluZ09iamVjdCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpmbG9hdGluZ09i
amVjdCk7CisgICAgaWYgKGl0ID09IG1fc2V0LmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAg
bV9zZXQucmVtb3ZlKGl0KTsKIH0KIAogdm9pZCBGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFj
ZWRGbG9hdHNUcmVlKCkKQEAgLTI2MiwxNSArMjU5LDIwIEBAIHZvaWQgRmxvYXRpbmdPYmplY3Rz
Ojpjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSgpCiAgICAgaWYgKG1fc2V0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5pbml0SWZOZWVkZWQobV9yZW5k
ZXJlci0+dmlldygpLmludGVydmFsQXJlbmEoKSk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IG1fc2V0LmJlZ2luKCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBtX3NldC5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKKyAgICBmb3IgKGF1dG8gaXQg
PSBtX3NldC5iZWdpbigpLCBlbmQgPSBtX3NldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGl0LT5nZXQoKTsKICAgICAg
ICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpKQogICAgICAgICAgICAgbV9wbGFjZWRG
bG9hdHNUcmVlLmFkZChpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KGZsb2F0aW5nT2JqZWN0KSk7
CiAgICAgfQogfQogCitpbmxpbmUgY29uc3QgRmxvYXRpbmdPYmplY3RUcmVlJiBGbG9hdGluZ09i
amVjdHM6OnBsYWNlZEZsb2F0c1RyZWUoKQoreworICAgIGlmICghbV9wbGFjZWRGbG9hdHNUcmVl
LmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgY29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKTsKKyAg
ICByZXR1cm4gbV9wbGFjZWRGbG9hdHNUcmVlOworfQorCiBMYXlvdXRVbml0IEZsb2F0aW5nT2Jq
ZWN0czo6bG9naWNhbExlZnRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5p
dCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBlT3V0c2lkZUZsb2F0
T2Zmc2V0TW9kZSBvZmZzZXRNb2RlLCBMYXlvdXRVbml0ICpoZWlnaHRSZW1haW5pbmcpCiB7CiAj
aWYgIUVOQUJMRShDU1NfU0hBUEVTKQpAQCAtMjg3LDcgKzI4OSw3IEBAIExheW91dFVuaXQgRmxv
YXRpbmdPYmplY3RzOjpsb2dpY2FsTGVmdE9mZnNldChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBM
YXlvdXRVbml0CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgY29uc3QgRmxvYXRpbmdPYmpl
Y3QqIG91dGVybW9zdEZsb2F0ID0gYWRhcHRlci5vdXRlcm1vc3RGbG9hdCgpOwogICAgIGlmIChv
ZmZzZXRNb2RlID09IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYgb3V0ZXJtb3N0Rmxv
YXQpIHsKLSAgICAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG91dGVy
bW9zdEZsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJbmZvKCkpIHsKKyAgICAgICAgaWYg
KFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG91dGVybW9zdEZsb2F0LT5yZW5kZXJl
cigpLnNoYXBlT3V0c2lkZUluZm8oKSkgewogICAgICAgICAgICAgc2hhcGVPdXRzaWRlLT51cGRh
dGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKG1fcmVuZGVyZXIsIG91dGVybW9zdEZsb2F0
LCBsb2dpY2FsVG9wLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgIG9mZnNldCArPSBzaGFw
ZU91dHNpZGUtPnJpZ2h0TWFyZ2luQm94RGVsdGEoKTsKICAgICAgICAgfQpAQCAtMzEzLDcgKzMx
NSw3IEBAIExheW91dFVuaXQgRmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsUmlnaHRPZmZzZXQoTGF5
b3V0VW5pdCBmaXhlZE9mZnNldCwgTGF5b3V0VW5pCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3QqIG91dGVybW9zdEZsb2F0ID0gYWRhcHRlci5vdXRlcm1v
c3RGbG9hdCgpOwogICAgIGlmIChvZmZzZXRNb2RlID09IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVP
ZmZzZXQgJiYgb3V0ZXJtb3N0RmxvYXQpIHsKLSAgICAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8q
IHNoYXBlT3V0c2lkZSA9IG91dGVybW9zdEZsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91dHNpZGVJ
bmZvKCkpIHsKKyAgICAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IG91
dGVybW9zdEZsb2F0LT5yZW5kZXJlcigpLnNoYXBlT3V0c2lkZUluZm8oKSkgewogICAgICAgICAg
ICAgc2hhcGVPdXRzaWRlLT51cGRhdGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKG1fcmVu
ZGVyZXIsIG91dGVybW9zdEZsb2F0LCBsb2dpY2FsVG9wLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAg
ICAgICAgIG9mZnNldCArPSBzaGFwZU91dHNpZGUtPmxlZnRNYXJnaW5Cb3hEZWx0YSgpOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmpl
Y3RzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmgKaW5kZXgg
Mjk2YzdkNjFlZTAzYTY3NjVmOWMyMGIwZGFhYmY4NDdkYmNhOTBiMC4uY2RhNWEzY2ZjYzBhZmI1
NGY5NzcyMzgxOTQ3NzUzMzc0MmVlZDE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9G
bG9hdGluZ09iamVjdHMuaApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlBPREludGVydmFs
VHJlZS5oIgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlIDx3dGYvTGlzdEhh
c2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDIsMTQgKzQxLDE1IEBAIHB1YmxpYzoKICAgICAvLyBOb3RlIHRoYXQgVHlwZSB1c2Vz
IGJpdHMgc28geW91IGNhbiB1c2UgRmxvYXRMZWZ0UmlnaHQgYXMgYSBtYXNrIHRvIHF1ZXJ5IGZv
ciBib3RoIGxlZnQgYW5kIHJpZ2h0LgogICAgIGVudW0gVHlwZSB7IEZsb2F0TGVmdCA9IDEsIEZs
b2F0UmlnaHQgPSAyLCBGbG9hdExlZnRSaWdodCA9IDMgfTsKIAotICAgIHN0YXRpYyBQYXNzT3du
UHRyPEZsb2F0aW5nT2JqZWN0PiBjcmVhdGUoUmVuZGVyQm94Kik7CisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4gY3JlYXRlKFJlbmRlckJveCYpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4gY29weVRvTmV3Q29udGFpbmVyKExheW91dFNpemUs
IGJvb2wgc2hvdWxkUGFpbnQgPSBmYWxzZSwgYm9vbCBpc0Rlc2NlbmRhbnQgPSBmYWxzZSkgY29u
c3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiB1bnNhZmVDbG9uZSgpIGNv
bnN0OwogCi0gICAgUGFzc093blB0cjxGbG9hdGluZ09iamVjdD4gY29weVRvTmV3Q29udGFpbmVy
KExheW91dFNpemUsIGJvb2wgc2hvdWxkUGFpbnQgPSBmYWxzZSwgYm9vbCBpc0Rlc2NlbmRhbnQg
PSBmYWxzZSkgY29uc3Q7Ci0KLSAgICBQYXNzT3duUHRyPEZsb2F0aW5nT2JqZWN0PiB1bnNhZmVD
bG9uZSgpIGNvbnN0OworICAgIGV4cGxpY2l0IEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCYpOwor
ICAgIEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCYsIFR5cGUsIGNvbnN0IExheW91dFJlY3QmLCBi
b29sIHNob3VsZFBhaW50LCBib29sIGlzRGVzY2VuZGFudCk7CiAKICAgICBUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9Ci0gICAgUmVuZGVyQm94
KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KKyAgICBSZW5kZXJCb3gm
IHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQogCiAgICAgYm9vbCBpc1Bs
YWNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQbGFjZWQ7IH0KICAgICB2b2lkIHNldElzUGxhY2Vk
KGJvb2wgcGxhY2VkID0gdHJ1ZSkgeyBtX2lzUGxhY2VkID0gcGxhY2VkOyB9CkBAIC0xMjcsMTAg
KzEyNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRmxvYXRp
bmdPYmplY3QoUmVuZGVyQm94Kik7Ci0gICAgRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiwgVHlw
ZSwgY29uc3QgTGF5b3V0UmVjdCYsIGJvb2wgc2hvdWxkUGFpbnQsIGJvb2wgaXNEZXNjZW5kYW50
KTsKLQotICAgIFJlbmRlckJveCogbV9yZW5kZXJlcjsKKyAgICBSZW5kZXJCb3gmIG1fcmVuZGVy
ZXI7CiAgICAgUm9vdElubGluZUJveCogbV9vcmlnaW5hdGluZ0xpbmU7CiAgICAgTGF5b3V0UmVj
dCBtX2ZyYW1lUmVjdDsKICAgICBpbnQgbV9wYWdpbmF0aW9uU3RydXQ7IC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBhIExheW91dFVuaXQsIHNpbmNlIGl0J3MgYSB2ZXJ0aWNhbCBvZmZzZXQuCkBA
IC0xNDUsMjAgKzE0MiwyNiBAQCBwcml2YXRlOgogfTsKIAogc3RydWN0IEZsb2F0aW5nT2JqZWN0
SGFzaEZ1bmN0aW9ucyB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRmxvYXRpbmdPYmplY3Qq
IGtleSkgeyByZXR1cm4gRGVmYXVsdEhhc2g8UmVuZGVyQm94Kj46Okhhc2g6Omhhc2goa2V5LT5y
ZW5kZXJlcigpKTsgfQotICAgIHN0YXRpYyBib29sIGVxdWFsKEZsb2F0aW5nT2JqZWN0KiBhLCBG
bG9hdGluZ09iamVjdCogYikgeyByZXR1cm4gYS0+cmVuZGVyZXIoKSA9PSBiLT5yZW5kZXJlcigp
OyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEZsb2F0
aW5nT2JqZWN0PiYga2V5KSB7IHJldHVybiBQdHJIYXNoPFJlbmRlckJveCo+OjpoYXNoKCZrZXkt
PnJlbmRlcmVyKCkpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qgc3RkOjp1bmlxdWVf
cHRyPEZsb2F0aW5nT2JqZWN0PiYgYSwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2Jq
ZWN0PiYgYikgeyByZXR1cm4gJmEtPnJlbmRlcmVyKCkgPT0gJmItPnJlbmRlcmVyKCk7IH0KICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
CiB9Owogc3RydWN0IEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3IgewotICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKFJlbmRlckJveCoga2V5KSB7IHJldHVybiBEZWZhdWx0SGFzaDxSZW5kZXJC
b3gqPjo6SGFzaDo6aGFzaChrZXkpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoRmxvYXRpbmdP
YmplY3QqIGEsIFJlbmRlckJveCogYikgeyByZXR1cm4gYS0+cmVuZGVyZXIoKSA9PSBiOyB9Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVuZGVyQm94JiBrZXkpIHsgcmV0dXJuIFB0
ckhhc2g8Y29uc3QgUmVuZGVyQm94Kj46Omhhc2goJmtleSk7IH0KKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBGbG9hdGluZ09iamVjdCYga2V5KSB7IHJldHVybiBQdHJIYXNoPFJlbmRl
ckJveCo+OjpoYXNoKCZrZXkucmVuZGVyZXIoKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRpbmdPYmplY3Q+JiBhLCBjb25zdCBSZW5kZXJCb3gm
IGIpIHsgcmV0dXJuICZhLT5yZW5kZXJlcigpID09ICZiOyB9CisgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiYgYSwgY29uc3QgRmxvYXRp
bmdPYmplY3QmIGIpIHsgcmV0dXJuICZhLT5yZW5kZXJlcigpID09ICZiLnJlbmRlcmVyKCk7IH0K
IH07Ci10eXBlZGVmIExpc3RIYXNoU2V0PEZsb2F0aW5nT2JqZWN0KiwgNCwgRmxvYXRpbmdPYmpl
Y3RIYXNoRnVuY3Rpb25zPiBGbG9hdGluZ09iamVjdFNldDsKLXR5cGVkZWYgRmxvYXRpbmdPYmpl
Y3RTZXQ6OmNvbnN0X2l0ZXJhdG9yIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3I7CisKK3R5cGVk
ZWYgTGlzdEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiwgNCwgRmxvYXRp
bmdPYmplY3RIYXNoRnVuY3Rpb25zPiBGbG9hdGluZ09iamVjdFNldDsKKwogdHlwZWRlZiBQT0RJ
bnRlcnZhbDxpbnQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsKIHR5
cGVkZWYgUE9ESW50ZXJ2YWxUcmVlPGludCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVj
dFRyZWU7CiB0eXBlZGVmIFBPREZyZWVMaXN0QXJlbmE8UE9EUmVkQmxhY2tUcmVlPEZsb2F0aW5n
T2JqZWN0SW50ZXJ2YWw+OjpOb2RlPiBJbnRlcnZhbEFyZW5hOwotdHlwZWRlZiBIYXNoTWFwPFJl
bmRlckJveCosIEZsb2F0aW5nT2JqZWN0Kj4gUmVuZGVyZXJUb0Zsb2F0SW5mb01hcDsKKworLy8g
RklYTUU6IFRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIHRoaW5nIGFzIEZsb2F0aW5nT2JqZWN0U2V0
LgorLy8gQ2hhbmdlIGNsaWVudHMgdG8gdXNlIHRoYXQgc2V0IGRpcmVjdGx5LCBhbmQgcmVwbGFj
ZSB0aGUgbW92ZUFsbFRvRmxvYXRJbmZvTWFwIGZ1bmN0aW9uIHdpdGggYSB0YWtlU2V0IGZ1bmN0
aW9uLgordHlwZWRlZiBIYXNoTWFwPFJlbmRlckJveCosIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGlu
Z09iamVjdD4+IFJlbmRlcmVyVG9GbG9hdEluZm9NYXA7CiAKIGNsYXNzIEZsb2F0aW5nT2JqZWN0
cyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmxvYXRpbmdPYmplY3RzKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CkBAIC0xNjgsNyArMTcxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBj
bGVhcigpOwogICAgIHZvaWQgbW92ZUFsbFRvRmxvYXRJbmZvTWFwKFJlbmRlcmVyVG9GbG9hdElu
Zm9NYXAmKTsKLSAgICBGbG9hdGluZ09iamVjdCogYWRkKFBhc3NPd25QdHI8RmxvYXRpbmdPYmpl
Y3Q+KTsKKyAgICBGbG9hdGluZ09iamVjdCogYWRkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09i
amVjdD4pOwogICAgIHZvaWQgcmVtb3ZlKEZsb2F0aW5nT2JqZWN0Kik7CiAgICAgdm9pZCBhZGRQ
bGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqKTsKICAgICB2b2lkIHJlbW92ZVBsYWNlZE9iamVj
dChGbG9hdGluZ09iamVjdCopOwpAQCAtMTgwLDE0ICsxODMsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgY2xlYXJMaW5lQm94VHJlZVBvaW50ZXJzKCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dE9mZnNldChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlID0gU2hh
cGVPdXRzaWRlRmxvYXRTaGFwZU9mZnNldCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nID0g
MCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9m
ZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNo
YXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSA9IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQs
IExheW91dFVuaXQqIGhlaWdodFJlbWFpbmluZyA9IDApOworCiBwcml2YXRlOgogICAgIHZvaWQg
Y29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUoKTsKLSAgICBjb25zdCBGbG9hdGluZ09iamVjdFRyZWUm
IHBsYWNlZEZsb2F0c1RyZWUoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3BsYWNlZEZsb2F0c1Ry
ZWUuaXNJbml0aWFsaXplZCgpKQotICAgICAgICAgICAgY29tcHV0ZVBsYWNlZEZsb2F0c1RyZWUo
KTsKLSAgICAgICAgcmV0dXJuIG1fcGxhY2VkRmxvYXRzVHJlZTsKLSAgICB9CisgICAgY29uc3Qg
RmxvYXRpbmdPYmplY3RUcmVlJiBwbGFjZWRGbG9hdHNUcmVlKCk7CiAgICAgdm9pZCBpbmNyZWFz
ZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7CiAgICAgdm9pZCBkZWNyZWFzZU9i
amVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7CiAgICAgRmxvYXRpbmdPYmplY3RJbnRl
cnZhbCBpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0Kik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGluZVdpZHRoLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MaW5lV2lkdGguY3BwCmluZGV4IGZjMWY0Njc1MTQ0ZjZmMTRlNWVkMDZh
ZGE2YWY3OGZmZmVmYTY3MzYuLjU2YWYzZmYxMDNiZDY3YWYxYzg1N2QwMmIzNjZjZTY0ZmU0NmQw
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MaW5lV2lkdGguY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MaW5lV2lkdGguY3BwCkBAIC0xMDMsMjAgKzEw
MywyMCBAQCB2b2lkIExpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElm
TmVlZGVkKEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdAogICAgIC8vIHRoZSBmaXJzdCBwcmV2aW91
cyBmbG9hdCB0aGF0IGlzIG9uIHRoZSBzYW1lIHNpZGUgYXMgb3VyIG5ld0Zsb2F0LgogICAgIFNo
YXBlT3V0c2lkZUluZm8qIHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbyA9IDA7CiAgICAgY29uc3Qg
RmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9ibG9jay5tX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4g
PSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOworICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVj
dFNldC5lbmQoKTsKKyAgICBhdXRvIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsK
ICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBtX2Jsb2NrLmxpbmVIZWlnaHQobV9pc0ZpcnN0
TGluZSwgbV9ibG9jay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUg
OiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7CiAgICAgZm9yICgt
LWl0OyBpdCAhPSBiZWdpbjsgLS1pdCkgewotICAgICAgICBGbG9hdGluZ09iamVjdCogcHJldmlv
dXNGbG9hdCA9ICppdDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHByZXZpb3VzRmxvYXQgPSBp
dC0+Z2V0KCk7CiAgICAgICAgIGlmIChwcmV2aW91c0Zsb2F0ICE9IG5ld0Zsb2F0ICYmIHByZXZp
b3VzRmxvYXQtPnR5cGUoKSA9PSBuZXdGbG9hdC0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBwcmV2
aW91c1NoYXBlT3V0c2lkZUluZm8gPSBwcmV2aW91c0Zsb2F0LT5yZW5kZXJlcigpLT5zaGFwZU91
dHNpZGVJbmZvKCk7CisgICAgICAgICAgICBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8gPSBwcmV2
aW91c0Zsb2F0LT5yZW5kZXJlcigpLnNoYXBlT3V0c2lkZUluZm8oKTsKICAgICAgICAgICAgIGlm
IChwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8pCiAgICAgICAgICAgICAgICAgcHJldmlvdXNTaGFw
ZU91dHNpZGVJbmZvLT51cGRhdGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKCZtX2Jsb2Nr
LCBwcmV2aW91c0Zsb2F0LCBtX2Jsb2NrLmxvZ2ljYWxIZWlnaHQoKSwgbGluZUhlaWdodCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIFNoYXBlT3V0c2lkZUlu
Zm8qIHNoYXBlT3V0c2lkZUluZm8gPSBuZXdGbG9hdC0+cmVuZGVyZXIoKS0+c2hhcGVPdXRzaWRl
SW5mbygpOworICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZUluZm8gPSBuZXdGbG9h
dC0+cmVuZGVyZXIoKS5zaGFwZU91dHNpZGVJbmZvKCk7CiAgICAgaWYgKHNoYXBlT3V0c2lkZUlu
Zm8pCiAgICAgICAgIHNoYXBlT3V0c2lkZUluZm8tPnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdC
bG9ja0xpbmUoJm1fYmxvY2ssIG5ld0Zsb2F0LCBtX2Jsb2NrLmxvZ2ljYWxIZWlnaHQoKSwgbGlu
ZUhlaWdodCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CmluZGV4IDM1ZDBhZDI3MWNmOGMxYTM3NzE1Mzg2NTRjYTY5MTgzZjA0OTI1OWUuLjUzYzE3NTVh
NmNlMTAyZThlNjQ4ZjY4YmM2ZjVkNmFkM2E3ZjIwNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMzM2LDE2ICszMzYsMTYgQEAgdm9pZCBSZW5kZXJCbG9j
azo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHkKICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgc19jYW5Q
cm9wYWdhdGVGbG9hdEludG9TaWJsaW5nICYmICFjYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5n
ICYmIGhhc092ZXJoYW5naW5nRmxvYXRzKCkpIHsKICAgICAgICAgUmVuZGVyQmxvY2sqIHBhcmVu
dEJsb2NrID0gdGhpczsKICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5n
T2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICBh
dXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogCiAgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjdXJyID0gcGFyZW50KCk7IGN1cnIgJiYgIWN1cnItPmlzUmVuZGVyVmlldygpOyBj
dXJyID0gY3Vyci0+cGFyZW50KCkpIHsKICAgICAgICAgICAgIGlmIChjdXJyLT5pc1JlbmRlckJs
b2NrKCkpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY3VyckJsb2NrID0gdG9SZW5k
ZXJCbG9jayhjdXJyKTsKIAogICAgICAgICAgICAgICAgIGlmIChjdXJyQmxvY2stPmhhc092ZXJo
YW5naW5nRmxvYXRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIHJlbmRlcmVyID0gKCpp
dCktPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyckJsb2NrLT5o
YXNPdmVyaGFuZ2luZ0Zsb2F0KHJlbmRlcmVyKSkgeworICAgICAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckJveCYgcmVuZGVyZXIgPSAoKml0KS0+cmVu
ZGVyZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyQmxvY2stPmhhc092ZXJo
YW5naW5nRmxvYXQoJnJlbmRlcmVyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmVudEJsb2NrID0gY3VyckJsb2NrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTEzOCwxMyArMTEzOCwxMyBAQCB2b2lk
IFJlbmRlckJsb2NrOjptb3ZlQWxsQ2hpbGRyZW5JbmNsdWRpbmdGbG9hdHNUbyhSZW5kZXJCbG9j
ayogdG9CbG9jaywgYm9vbCBmdQogICAgICAgICAgICAgdG9CbG9jay0+Y3JlYXRlRmxvYXRpbmdP
YmplY3RzKCk7CiAKICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZyb21GbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBlbmQgPSBmcm9tRmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAg
ICAgIGF1dG8gZW5kID0gZnJvbUZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogCi0gICAgICAgIGZv
ciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZyb21GbG9hdGluZ09iamVjdFNldC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
bG9hdGluZ09iamVjdCA9ICppdDsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gZnJvbUZsb2F0aW5n
T2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gaXQtPmdldCgpOwogCiAgICAgICAgICAgICAvLyBE
b24ndCBpbnNlcnQgdGhlIG9iamVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QK
LSAgICAgICAgICAgIGlmICh0b0Jsb2NrLT5jb250YWluc0Zsb2F0KGZsb2F0aW5nT2JqZWN0LT5y
ZW5kZXJlcigpKSkKKyAgICAgICAgICAgIGlmICh0b0Jsb2NrLT5jb250YWluc0Zsb2F0KCZmbG9h
dGluZ09iamVjdC0+cmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgICAgIHRvQmxvY2stPm1fZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmplY3Qt
PnVuc2FmZUNsb25lKCkpOwpAQCAtMTY2OCwxMSArMTY2OCwxMSBAQCB2b2lkIFJlbmRlckJsb2Nr
OjphZGRPdmVyZmxvd0Zyb21GbG9hdHMoKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVj
dFNldC5lbmQoKTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRmxvYXRp
bmdPYmplY3QqIHIgPSAqaXQ7CisgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKKyAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBpdC0+Z2V0KCk7CiAgICAg
ICAgIGlmIChyLT5pc0Rlc2NlbmRhbnQoKSkKLSAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUNo
aWxkKHItPnJlbmRlcmVyKCksIEludFNpemUoeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJn
aW4ociksIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpKSk7CisgICAgICAgICAg
ICBhZGRPdmVyZmxvd0Zyb21DaGlsZCgmci0+cmVuZGVyZXIoKSwgSW50U2l6ZSh4UG9zaXRpb25G
b3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJn
aW4ocikpKTsKICAgICB9CiB9CiAKQEAgLTIxODMsMTcgKzIxODMsMTcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cykK
ICAgICAvLyBpbiB0aGlzIGJsb2NrLiBCZXR0ZXIgeWV0IHdvdWxkIGJlIHRvIHB1c2ggZXh0cmEg
c3RhdGUgZm9yIHRoZSBjb250YWluZXJzIG9mIG90aGVyIGZsb2F0cy4KICAgICBMYXlvdXRTdGF0
ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIoJnZpZXcoKSk7CiAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQu
ZW5kKCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdP
YmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2Jq
ZWN0KiByID0gKml0OworICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Cisg
ICAgZm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQtPmdldCgpOwogICAgICAgICAv
LyBPbmx5IHJlcGFpbnQgdGhlIG9iamVjdCBpZiBpdCBpcyBvdmVyaGFuZ2luZywgaXMgbm90IGlu
IGl0cyBvd24gbGF5ZXIsIGFuZAogICAgICAgICAvLyBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8g
cGFpbnQgKG1fc2hvdWxkUGFpbnQgaXMgc2V0KS4gV2hlbiBwYWludEFsbERlc2NlbmRhbnRzIGlz
IHRydWUsIHRoZSBsYXR0ZXIKICAgICAgICAgLy8gY29uZGl0aW9uIGlzIHJlcGxhY2VkIHdpdGgg
YmVpbmcgYSBkZXNjZW5kYW50IG9mIHVzLgogICAgICAgICBpZiAoci0+bG9naWNhbEJvdHRvbShp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSA+IGxvZ2ljYWxIZWlnaHQoKQotICAgICAgICAgICAg
JiYgIXItPnJlbmRlcmVyKCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkKLSAgICAgICAgICAgICYm
IChyLT5zaG91bGRQYWludCgpIHx8IChwYWludEFsbERlc2NlbmRhbnRzICYmIHItPnJlbmRlcmVy
KCktPmlzRGVzY2VuZGFudE9mKHRoaXMpKSkpIHsKLSAgICAgICAgICAgIHItPnJlbmRlcmVyKCkt
PnJlcGFpbnQoKTsKLSAgICAgICAgICAgIHItPnJlbmRlcmVyKCktPnJlcGFpbnRPdmVyaGFuZ2lu
Z0Zsb2F0cyhmYWxzZSk7CisgICAgICAgICAgICAmJiAhci0+cmVuZGVyZXIoKS5oYXNTZWxmUGFp
bnRpbmdMYXllcigpCisgICAgICAgICAgICAmJiAoci0+c2hvdWxkUGFpbnQoKSB8fCAocGFpbnRB
bGxEZXNjZW5kYW50cyAmJiByLT5yZW5kZXJlcigpLmlzRGVzY2VuZGFudE9mKHRoaXMpKSkpIHsK
KyAgICAgICAgICAgIHItPnJlbmRlcmVyKCkucmVwYWludCgpOworICAgICAgICAgICAgci0+cmVu
ZGVyZXIoKS5yZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMoZmFsc2UpOwogICAgICAgICB9CiAgICAg
fQogfQpAQCAtMjU4Niw4ICsyNTg2LDggQEAgTGF5b3V0UG9pbnQgUmVuZGVyQmxvY2s6OmZsaXBG
bG9hdEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGMKICAgICAv
LyBpdCdzIGdvaW5nIHRvIGdldCBhZGRlZCBiYWNrIGluLiBXZSBoaWRlIHRoaXMgY29tcGxpY2F0
aW9uIGhlcmUgc28gdGhhdCB0aGUgY2FsbGluZyBjb2RlIGxvb2tzIG5vcm1hbCBmb3IgdGhlIHVu
ZmxpcHBlZAogICAgIC8vIGNhc2UuCiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
Ci0gICAgICAgIHJldHVybiBMYXlvdXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGhlaWdo
dCgpIC0gY2hpbGQtPnJlbmRlcmVyKCktPmhlaWdodCgpIC0gMiAqIHlQb3NpdGlvbkZvckZsb2F0
SW5jbHVkaW5nTWFyZ2luKGNoaWxkKSk7Ci0gICAgcmV0dXJuIExheW91dFBvaW50KHBvaW50Lngo
KSArIHdpZHRoKCkgLSBjaGlsZC0+cmVuZGVyZXIoKS0+d2lkdGgoKSAtIDIgKiB4UG9zaXRpb25G
b3JGbG9hdEluY2x1ZGluZ01hcmdpbihjaGlsZCksIHBvaW50LnkoKSk7CisgICAgICAgIHJldHVy
biBMYXlvdXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGhlaWdodCgpIC0gY2hpbGQtPnJl
bmRlcmVyKCkuaGVpZ2h0KCkgLSAyICogeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4o
Y2hpbGQpKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQocG9pbnQueCgpICsgd2lkdGgoKSAtIGNo
aWxkLT5yZW5kZXJlcigpLndpZHRoKCkgLSAyICogeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdN
YXJnaW4oY2hpbGQpLCBwb2ludC55KCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludEZs
b2F0cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
LCBib29sIHByZXNlcnZlUGhhc2UpCkBAIC0yNTk2LDI1ICsyNTk2LDI1IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnBhaW50RmxvYXRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICBG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwot
ICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGbG9hdGluZ09iamVjdCogciA9
ICppdDsKKyAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgIGZvciAo
YXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IGl0LT5nZXQoKTsKICAgICAgICAgLy8gT25seSBw
YWludCB0aGUgb2JqZWN0IGlmIG91ciBtX3Nob3VsZFBhaW50IGZsYWcgaXMgc2V0LgotICAgICAg
ICBpZiAoci0+c2hvdWxkUGFpbnQoKSAmJiAhci0+cmVuZGVyZXIoKS0+aGFzU2VsZlBhaW50aW5n
TGF5ZXIoKSkgeworICAgICAgICBpZiAoci0+c2hvdWxkUGFpbnQoKSAmJiAhci0+cmVuZGVyZXIo
KS5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICBQYWludEluZm8gY3VycmVu
dFBhaW50SW5mbyhwYWludEluZm8pOwogICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFz
ZSA9IHByZXNlcnZlUGhhc2UgPyBwYWludEluZm8ucGhhc2UgOiBQYWludFBoYXNlQmxvY2tCYWNr
Z3JvdW5kOwogICAgICAgICAgICAgLy8gRklYTUU6IExheW91dFBvaW50IHZlcnNpb24gb2YgeFBv
c2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4gd291bGQgbWFrZSB0aGlzIG11Y2ggY2xlYW5l
ci4KLSAgICAgICAgICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRmxvYXRGb3JXcml0
aW5nTW9kZUZvckNoaWxkKHIsIExheW91dFBvaW50KHBhaW50T2Zmc2V0LngoKSArIHhQb3NpdGlv
bkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpIC0gci0+cmVuZGVyZXIoKS0+eCgpLCBwYWludE9m
ZnNldC55KCkgKyB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPnJlbmRl
cmVyKCktPnkoKSkpOwotICAgICAgICAgICAgci0+cmVuZGVyZXIoKS0+cGFpbnQoY3VycmVudFBh
aW50SW5mbywgY2hpbGRQb2ludCk7CisgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50
ID0gZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGVGb3JDaGlsZChyLCBMYXlvdXRQb2ludChwYWludE9m
ZnNldC54KCkgKyB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPnJlbmRl
cmVyKCkueCgpLCBwYWludE9mZnNldC55KCkgKyB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01h
cmdpbihyKSAtIHItPnJlbmRlcmVyKCkueSgpKSk7CisgICAgICAgICAgICByLT5yZW5kZXJlcigp
LnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICAgICAgaWYgKCFw
cmVzZXJ2ZVBoYXNlKSB7CiAgICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9
IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7Ci0gICAgICAgICAgICAgICAgci0+cmVu
ZGVyZXIoKS0+cGFpbnQoY3VycmVudFBhaW50SW5mbywgY2hpbGRQb2ludCk7CisgICAgICAgICAg
ICAgICAgci0+cmVuZGVyZXIoKS5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsK
ICAgICAgICAgICAgICAgICBjdXJyZW50UGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZsb2F0
OwotICAgICAgICAgICAgICAgIHItPnJlbmRlcmVyKCktPnBhaW50KGN1cnJlbnRQYWludEluZm8s
IGNoaWxkUG9pbnQpOworICAgICAgICAgICAgICAgIHItPnJlbmRlcmVyKCkucGFpbnQoY3VycmVu
dFBhaW50SW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5m
by5waGFzZSA9IFBhaW50UGhhc2VGb3JlZ3JvdW5kOwotICAgICAgICAgICAgICAgIHItPnJlbmRl
cmVyKCktPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQpOworICAgICAgICAgICAg
ICAgIHItPnJlbmRlcmVyKCkucGFpbnQoY3VycmVudFBhaW50SW5mbywgY2hpbGRQb2ludCk7CiAg
ICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VPdXRsaW5l
OwotICAgICAgICAgICAgICAgIHItPnJlbmRlcmVyKCktPnBhaW50KGN1cnJlbnRQYWludEluZm8s
IGNoaWxkUG9pbnQpOworICAgICAgICAgICAgICAgIHItPnJlbmRlcmVyKCkucGFpbnQoY3VycmVu
dFBhaW50SW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC0yODI1LDEyICsyODI1LDEyIEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25H
YXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByCiAgICAgICAg
ICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5mbywgTGF5b3V0UG9pbnQo
Y2ItPngoKSwgY2ItPnkoKSksIGNiLT5wb3NpdGlvbmVkT2JqZWN0cygpKTsgLy8gRklYTUU6IE5v
dCByaWdodCBmb3IgZmxpcHBlZCB3cml0aW5nIG1vZGVzLgogICAgICAgICBpZiAobV9mbG9hdGlu
Z09iamVjdHMpIHsKICAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAg
ICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVj
dFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdCogciA9ICppdDsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dCogciA9IGl0LT5nZXQoKTsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGZsb2F0Qm94KG9m
ZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSArIHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFy
Z2luKHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0RnJvbVJv
b3RCbG9jay5oZWlnaHQoKSArIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+cmVuZGVyZXIoKS0+d2lkdGgo
KSwgci0+cmVuZGVyZXIoKS0+aGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgci0+cmVuZGVyZXIoKS53aWR0aCgpLCByLT5yZW5kZXJlcigpLmhlaWdodCgpKTsK
ICAgICAgICAgICAgICAgICByb290QmxvY2stPmZsaXBGb3JXcml0aW5nTW9kZShmbG9hdEJveCk7
CiAgICAgICAgICAgICAgICAgZmxvYXRCb3gubW92ZShyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9u
LngoKSwgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbi55KCkpOwogICAgICAgICAgICAgICAgIHBh
aW50SW5mby0+Y29udGV4dC0+Y2xpcE91dChwaXhlbFNuYXBwZWRJbnRSZWN0KGZsb2F0Qm94KSk7
CkBAIC0zMjYzLDE0ICszMjYzLDE0IEBAIEZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5z
ZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogICAgIGVsc2UgewogICAgICAgICAvLyBE
b24ndCBpbnNlcnQgdGhlIG9iamVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QK
ICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhh
c2hUcmFuc2xhdG9yPihvKTsKKyAgICAgICAgYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmZp
bmQ8UmVuZGVyQm94JiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4oKm8pOwogICAgICAg
ICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4g
Kml0OworICAgICAgICAgICAgcmV0dXJuIGl0LT5nZXQoKTsKICAgICB9CiAKICAgICAvLyBDcmVh
dGUgdGhlIHNwZWNpYWwgb2JqZWN0IGVudHJ5ICYgYXBwZW5kIGl0IHRvIHRoZSBsaXN0CiAKLSAg
ICBPd25QdHI8RmxvYXRpbmdPYmplY3Q+IG5ld09iaiA9IEZsb2F0aW5nT2JqZWN0OjpjcmVhdGUo
byk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiBvYmplY3QgPSBGbG9hdGlu
Z09iamVjdDo6Y3JlYXRlKCpvKTsKICAgICAKICAgICAvLyBPdXIgbG9jYXRpb24gaXMgaXJyZWxl
dmFudCBpZiB3ZSdyZSB1bnNwbGl0dGFibGUgb3Igbm8gcGFnaW5hdGlvbiBpcyBpbiBlZmZlY3Qu
CiAgICAgLy8gSnVzdCBnbyBhaGVhZCBhbmQgbGF5IG91dCB0aGUgZmxvYXQuCkBAIC0zMjg2LDIz
ICszMjg2LDIzIEBAIEZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdP
YmplY3QoUmVuZGVyQm94KiBvKQogICAgICAgICBvLT5jb21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rp
b25NYXJnaW5zKHRoaXMpOwogICAgIH0KIAotICAgIG5ld09iai0+c2V0TG9naWNhbFdpZHRoKGxv
Z2ljYWxXaWR0aEZvckNoaWxkKG8pICsgbWFyZ2luU3RhcnRGb3JDaGlsZChvKSArIG1hcmdpbkVu
ZEZvckNoaWxkKG8pLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICBvYmplY3QtPnNl
dExvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGhGb3JDaGlsZChvKSArIG1hcmdpblN0YXJ0Rm9yQ2hp
bGQobykgKyBtYXJnaW5FbmRGb3JDaGlsZChvKSwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7
CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hh
cGVPdXRzaWRlID0gby0+c2hhcGVPdXRzaWRlSW5mbygpKQogICAgICAgICBzaGFwZU91dHNpZGUt
PnNldFNoYXBlU2l6ZShsb2dpY2FsV2lkdGhGb3JDaGlsZChvKSwgbG9naWNhbEhlaWdodEZvckNo
aWxkKG8pKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQobmV3
T2JqLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoc3RkOjpt
b3ZlKG9iamVjdCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVj
dChSZW5kZXJCb3gqIG8pCiB7CiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAg
IGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNs
YXRvcj4obyk7CisgICAgICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5maW5kPFJlbmRl
ckJveCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpvKTsKICAgICAgICAgaWYgKGl0
ICE9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVj
dCogciA9ICppdDsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQtPmdldCgpOwog
ICAgICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxUb3AgPSByLT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpOwogICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IHItPmxvZ2lj
YWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CkBAIC0zMzM4LDE4ICszMzM4LDE4
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KEZsb2F0aW5n
T2JqZWN0KiBsYXN0RmxvYXQsIGludCBsb2dpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7Ci0gICAgRmxvYXRpbmdPYmplY3QqIGN1cnIgPSBmbG9hdGluZ09iamVjdFNl
dC5sYXN0KCk7CisgICAgRmxvYXRpbmdPYmplY3QqIGN1cnIgPSBmbG9hdGluZ09iamVjdFNldC5s
YXN0KCkuZ2V0KCk7CiAgICAgd2hpbGUgKGN1cnIgIT0gbGFzdEZsb2F0ICYmICghY3Vyci0+aXNQ
bGFjZWQoKSB8fCBjdXJyLT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID49
IGxvZ2ljYWxPZmZzZXQpKSB7CiAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoY3Vy
cik7CiAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKTsKKyAgICAg
ICAgY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKS5nZXQoKTsKICAgICB9CiB9CiAKIExh
eW91dFBvaW50IFJlbmRlckJsb2NrOjpjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQoY29u
c3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3BP
ZmZzZXQpIGNvbnN0CiB7Ci0gICAgUmVuZGVyQm94KiBjaGlsZEJveCA9IGZsb2F0aW5nT2JqZWN0
LT5yZW5kZXJlcigpOworICAgIFJlbmRlckJveCogY2hpbGRCb3ggPSAmZmxvYXRpbmdPYmplY3Qt
PnJlbmRlcmVyKCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yQ29udGVudChsb2dpY2FsVG9wT2Zmc2V0KTsgLy8gQ29uc3RhbnQgcGFydCBv
ZiBsZWZ0IG9mZnNldC4KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldDsgLy8gQ29u
c3RhbnQgcGFydCBvZiByaWdodCBvZmZzZXQuCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCkBAIC0z
NDMyLDE0ICszNDMyLDE0IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkK
ICAgICAvLyBNb3ZlIGJhY2t3YXJkcyB0aHJvdWdoIG91ciBmbG9hdGluZyBvYmplY3QgbGlzdCB1
bnRpbCB3ZSBmaW5kIGEgZmxvYXQgdGhhdCBoYXMKICAgICAvLyBhbHJlYWR5IGJlZW4gcG9zaXRp
b25lZC4gIFRoZW4gd2UnbGwgYmUgYWJsZSB0byBtb3ZlIGZvcndhcmQsIHBvc2l0aW9uaW5nIGFs
bCBvZgogICAgIC8vIHRoZSBuZXcgZmxvYXRzIHRoYXQgbmVlZCBpdC4KLSAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgYXV0byBp
dCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIC0taXQ7IC8vIEdvIHRvIGxhc3QgaXRl
bS4KLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2luID0gZmxvYXRpbmdPYmplY3RT
ZXQuYmVnaW4oKTsKKyAgICBhdXRvIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsK
ICAgICBGbG9hdGluZ09iamVjdCogbGFzdFBsYWNlZEZsb2F0aW5nT2JqZWN0ID0gMDsKICAgICB3
aGlsZSAoaXQgIT0gYmVnaW4pIHsKICAgICAgICAgLS1pdDsKICAgICAgICAgaWYgKCgqaXQpLT5p
c1BsYWNlZCgpKSB7Ci0gICAgICAgICAgICBsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3QgPSAqaXQ7
CisgICAgICAgICAgICBsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7CiAgICAg
ICAgICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM0NTEsMTYg
KzM0NTEsMTYgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgIGlm
IChsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3QpCiAgICAgICAgIGxvZ2ljYWxUb3AgPSBtYXgobGFz
dFBsYWNlZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpLCBsb2dpY2FsVG9wKTsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNl
dC5lbmQoKTsKICAgICAvLyBOb3cgd2FsayB0aHJvdWdoIHRoZSBzZXQgb2YgdW5wb3NpdGlvbmVk
IGZsb2F0cyBhbmQgcGxhY2UgdGhlbS4KICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKKyAgICAgICAgRmxv
YXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gaXQtPmdldCgpOwogICAgICAgICAvLyBUaGUg
Y29udGFpbmluZyBibG9jayBpcyByZXNwb25zaWJsZSBmb3IgcG9zaXRpb25pbmcgZmxvYXRzLCBz
byBpZiB3ZSBoYXZlIGZsb2F0cyBpbiBvdXIKICAgICAgICAgLy8gbGlzdCB0aGF0IGNvbWUgZnJv
bSBzb21ld2hlcmUgZWxzZSwgZG8gbm90IGF0dGVtcHQgdG8gcG9zaXRpb24gdGhlbS4KLSAgICAg
ICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKSAhPSB0
aGlzKQorICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkuY29udGFpbmluZ0Js
b2NrKCkgIT0gdGhpcykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFJlbmRlckJv
eCogY2hpbGRCb3ggPSBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsKKyAgICAgICAgUmVuZGVy
Qm94KiBjaGlsZEJveCA9ICZmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsKIAogICAgICAgICBM
YXlvdXRVbml0IGNoaWxkTG9naWNhbExlZnRNYXJnaW4gPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBtYXJnaW5TdGFydEZvckNoaWxkKGNoaWxkQm94KSA6IG1hcmdpbkVuZEZv
ckNoaWxkKGNoaWxkQm94KTsKIApAQCAtMzc0NCw5ICszNzQ0LDkgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCbG9jazo6bmV4dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KExheW91dFVuaXQgbG9naWNhbEhl
aWdodCkgY28KIAogICAgIExheW91dFVuaXQgYm90dG9tID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxv
YXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OworICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmpl
Y3RTZXQuZW5kKCk7CisgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQtPmdl
dCgpOwogICAgICAgICBMYXlvdXRVbml0IGZsb2F0Qm90dG9tID0gci0+bG9naWNhbEJvdHRvbShp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKICAgICAgICAgaWYgKGZsb2F0Qm90dG9tID4gbG9n
aWNhbEhlaWdodCkKICAgICAgICAgICAgIGJvdHRvbSA9IG1pbihmbG9hdEJvdHRvbSwgYm90dG9t
KTsKQEAgLTM3NjEsOSArMzc2MSw5IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Omxvd2VzdEZs
b2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6VHlwZSBmbG9hdFR5cGUpCiAgICAgICAg
IHJldHVybiAwOwogICAgIExheW91dFVuaXQgbG93ZXN0RmxvYXRCb3R0b20gPSAwOwogICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOwotICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBG
bG9hdGluZ09iamVjdCogciA9ICppdDsKKyAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IGl0LT5nZXQoKTsK
ICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgci0+dHlwZSgpICYgZmxvYXRUeXBlKQogICAg
ICAgICAgICAgbG93ZXN0RmxvYXRCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRCb3R0b20sIHItPmxv
Z2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOwogICAgIH0KQEAgLTM4MDAs
MTYgKzM4MDAsMTYgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9h
dHMoUmVuZGVyQmxvY2sqIGNoaWxkLCBib29sIG1ha2VDaGlsZFAKIAogICAgIC8vIEZsb2F0cyB0
aGF0IHdpbGwgcmVtYWluIHRoZSBjaGlsZCdzIHJlc3BvbnNpYmlsaXR5IHRvIHBhaW50IHNob3Vs
ZCBmYWN0b3IgaW50byBpdHMKICAgICAvLyBvdmVyZmxvdy4KLSAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGNoaWxkRW5kID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5lbmQo
KTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgY2hpbGRJdCA9IGNoaWxkLT5t
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuYmVnaW4oKTsgY2hpbGRJdCAhPSBjaGlsZEVuZDsgKytj
aGlsZEl0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKmNoaWxkSXQ7CisgICAgYXV0
byBjaGlsZEVuZCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuZW5kKCk7CisgICAg
Zm9yIChhdXRvIGNoaWxkSXQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmJlZ2lu
KCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7ICsrY2hpbGRJdCkgeworICAgICAgICBGbG9hdGluZ09i
amVjdCogciA9IGNoaWxkSXQtPmdldCgpOwogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0
b21Gb3JGbG9hdCA9IG1pbihyLT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpLCBMYXlvdXRVbml0OjptYXgoKSAtIGNoaWxkTG9naWNhbFRvcCk7CiAgICAgICAgIExheW91
dFVuaXQgbG9naWNhbEJvdHRvbSA9IGNoaWxkTG9naWNhbFRvcCArIGxvZ2ljYWxCb3R0b21Gb3JG
bG9hdDsKICAgICAgICAgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tID0gbWF4KGxvd2VzdEZsb2F0
TG9naWNhbEJvdHRvbSwgbG9naWNhbEJvdHRvbSk7CiAKICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0
b20gPiBsb2dpY2FsSGVpZ2h0KCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgaXMg
bm90IGluIHRoZSBsaXN0LCB3ZSBhZGQgaXQgbm93LgotICAgICAgICAgICAgaWYgKCFjb250YWlu
c0Zsb2F0KHItPnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICBpZiAoIWNvbnRhaW5zRmxvYXQo
JnItPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gTGF5b3V0U2l6ZSgtY2hpbGRMb2dpY2FsTGVmdCwg
LWNoaWxkTG9naWNhbFRvcCkgOiBMYXlvdXRTaXplKC1jaGlsZExvZ2ljYWxUb3AsIC1jaGlsZExv
Z2ljYWxMZWZ0KTsKICAgICAgICAgICAgICAgICBib29sIHNob3VsZFBhaW50ID0gZmFsc2U7CiAK
QEAgLTM4MTcsNyArMzgxNyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5n
aW5nRmxvYXRzKFJlbmRlckJsb2NrKiBjaGlsZCwgYm9vbCBtYWtlQ2hpbGRQCiAgICAgICAgICAg
ICAgICAgLy8gYmVoYXZlcyBwcm9wZXJseSkuICBXZSBhbHdheXMgd2FudCB0byBwcm9wYWdhdGUg
dGhlIGRlc2lyZSB0byBwYWludCB0aGUgZmxvYXQgYXMKICAgICAgICAgICAgICAgICAvLyBmYXIg
b3V0IGFzIHdlIGNhbiwgdG8gdGhlIG91dGVybW9zdCBibG9jayB0aGF0IG92ZXJsYXBzIHRoZSBm
bG9hdCwgc3RvcHBpbmcgb25seQogICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhpdCBhIHNlbGYt
cGFpbnRpbmcgbGF5ZXIgYm91bmRhcnkuCi0gICAgICAgICAgICAgICAgaWYgKHItPnJlbmRlcmVy
KCktPmVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpID09IGVuY2xvc2luZ0Zsb2F0UGFpbnRp
bmdMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKHItPnJlbmRlcmVyKCkuZW5jbG9zaW5n
RmxvYXRQYWludGluZ0xheWVyKCkgPT0gZW5jbG9zaW5nRmxvYXRQYWludGluZ0xheWVyKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgci0+c2V0U2hvdWxkUGFpbnQoZmFsc2UpOwogICAgICAgICAg
ICAgICAgICAgICBzaG91bGRQYWludCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzgy
OCw4ICszODI4LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9h
dHMoUmVuZGVyQmxvY2sqIGNoaWxkLCBib29sIG1ha2VDaGlsZFAKICAgICAgICAgICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+YWRkKHItPmNvcHlUb05ld0NvbnRhaW5lcihvZmZzZXQsIHNob3Vs
ZFBhaW50LCB0cnVlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAobWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhci0+c2hvdWxkUGFpbnQoKSAm
JiAhci0+cmVuZGVyZXIoKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKQotICAgICAgICAgICAgICAg
ICYmIHItPnJlbmRlcmVyKCktPmlzRGVzY2VuZGFudE9mKGNoaWxkKSAmJiByLT5yZW5kZXJlcigp
LT5lbmNsb3NpbmdGbG9hdFBhaW50aW5nTGF5ZXIoKSA9PSBjaGlsZC0+ZW5jbG9zaW5nRmxvYXRQ
YWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgICAgIGlmIChtYWtlQ2hpbGRQYWludE90aGVyRmxv
YXRzICYmICFyLT5zaG91bGRQYWludCgpICYmICFyLT5yZW5kZXJlcigpLmhhc1NlbGZQYWludGlu
Z0xheWVyKCkKKyAgICAgICAgICAgICAgICAmJiByLT5yZW5kZXJlcigpLmlzRGVzY2VuZGFudE9m
KGNoaWxkKSAmJiByLT5yZW5kZXJlcigpLmVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpID09
IGNoaWxkLT5lbmNsb3NpbmdGbG9hdFBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgICAg
IC8vIFRoZSBmbG9hdCBpcyBub3Qgb3ZlcmhhbmdpbmcgZnJvbSB0aGlzIGJsb2NrLCBzbyBpZiBp
dCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIGNoaWxkLCB0aGUgY2hpbGQgc2hvdWxkCiAgICAgICAg
ICAgICAgICAgLy8gcGFpbnQgaXQgKHRoZSBvdGhlciBjYXNlIGlzIHRoYXQgaXQgaXMgaW50cnVk
aW5nIGludG8gdGhlIGNoaWxkKSwgdW5sZXNzIGl0IGhhcyBpdHMgb3duIGxheWVyIG9yIGVuY2xv
c2luZwogICAgICAgICAgICAgICAgIC8vIGxheWVyLgpAQCAtMzg0MSw3ICszODQxLDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIGNo
aWxkLCBib29sIG1ha2VDaGlsZFAKICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBmbG9hdCBkb2Vz
bid0IG92ZXJoYW5nLCBpdCBkaWRuJ3QgZ2V0IHB1dCBpbnRvIG91ciBsaXN0LiAgV2UgbmVlZCB0
byBnbyBhaGVhZCBhbmQgYWRkIGl0cyBvdmVyZmxvdyBpbiB0byB0aGUKICAgICAgICAgICAgIC8v
IGNoaWxkIG5vdy4KICAgICAgICAgICAgIGlmIChyLT5pc0Rlc2NlbmRhbnQoKSkKLSAgICAgICAg
ICAgICAgICBjaGlsZC0+YWRkT3ZlcmZsb3dGcm9tQ2hpbGQoci0+cmVuZGVyZXIoKSwgTGF5b3V0
U2l6ZSh4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxv
YXRJbmNsdWRpbmdNYXJnaW4ocikpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+YWRkT3ZlcmZs
b3dGcm9tQ2hpbGQoJnItPnJlbmRlcmVyKCksIExheW91dFNpemUoeFBvc2l0aW9uRm9yRmxvYXRJ
bmNsdWRpbmdNYXJnaW4ociksIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpKSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbTsK
QEAgLTM4NTMsNyArMzg1Myw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Omhhc092ZXJoYW5naW5nRmxv
YXQoUmVuZGVyQm94KiByZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29u
c3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVj
dHMtPnNldCgpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KHJl
bmRlcmVyKTsKKyAgICBhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxSZW5kZXJCb3gm
LCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigqcmVuZGVyZXIpOwogICAgIGlmIChpdCA9
PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0z
ODcxLDExICszODcxLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyhS
ZW5kZXJCbG9jayogcHJldiwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mCiAgICAgbG9naWNhbExl
ZnRPZmZzZXQgKz0gbWFyZ2luTG9naWNhbExlZnQoKTsKIAogICAgIGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0U2V0JiBwcmV2U2V0ID0gcHJldi0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgcHJldkVuZCA9IHByZXZTZXQuZW5kKCk7Ci0gICAgZm9y
IChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIHByZXZJdCA9IHByZXZTZXQuYmVnaW4oKTsgcHJl
dkl0ICE9IHByZXZFbmQ7ICsrcHJldkl0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0g
KnByZXZJdDsKKyAgICBhdXRvIHByZXZFbmQgPSBwcmV2U2V0LmVuZCgpOworICAgIGZvciAoYXV0
byBwcmV2SXQgPSBwcmV2U2V0LmJlZ2luKCk7IHByZXZJdCAhPSBwcmV2RW5kOyArK3ByZXZJdCkg
eworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9IHByZXZJdC0+Z2V0KCk7CiAgICAgICAgIGlm
IChyLT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID4gbG9naWNhbFRv
cE9mZnNldCkgewotICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cyB8fCAhbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpLmNvbnRhaW5zKHIpKSB7CisgICAgICAgICAgICBpZiAoIW1fZmxv
YXRpbmdPYmplY3RzIHx8ICFtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuY29udGFpbnM8RmxvYXRp
bmdPYmplY3QmLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigqcikpIHsKICAgICAgICAg
ICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGxhemlseS4KICAg
ICAgICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICAgICAgICAgICAg
ICBjcmVhdGVGbG9hdGluZ09iamVjdHMoKTsKQEAgLTM5MDMsNyArMzkwMyw3IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6OmF2b2lkc0Zsb2F0cygpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQmxvY2s6OmNvbnRh
aW5zRmxvYXQoUmVuZGVyQm94KiByZW5kZXJlcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mbG9h
dGluZ09iamVjdHMgJiYgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmNvbnRhaW5zPFJlbmRlckJv
eCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KHJlbmRlcmVyKTsKKyAgICByZXR1cm4g
bV9mbG9hdGluZ09iamVjdHMgJiYgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmNvbnRhaW5zPFJl
bmRlckJveCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpyZW5kZXJlcik7CiB9CiAK
IHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQo
UmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlLCBib29sIGluTGF5b3V0KQpAQCAtMzkzNSwxNSArMzkz
NSwxNSBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrU2libGluZ3NXaXRoRmxvYXRzRm9yTGF5b3V0
KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3Qg
RmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMt
PnNldCgpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmpl
Y3RTZXQuZW5kKCk7CisgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKIAog
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsgbmV4dDsgbmV4dCA9
IG5leHQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFuZXh0LT5pc1JlbmRlckJsb2Nr
KCkgfHwgbmV4dC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IHRvUmVuZGVy
QmxvY2sobmV4dCktPmF2b2lkc0Zsb2F0cygpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgUmVuZGVyQmxvY2sqIG5leHRCbG9jayA9IHRvUmVuZGVyQmxvY2sobmV4dCk7Ci0gICAg
ICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUmVuZGVyQm94KiBmbG9h
dGluZ0JveCA9ICgqaXQpLT5yZW5kZXJlcigpOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFJl
bmRlckJveCogZmxvYXRpbmdCb3ggPSAmKCppdCktPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBp
ZiAoZmxvYXRUb1JlbW92ZSAmJiBmbG9hdGluZ0JveCAhPSBmbG9hdFRvUmVtb3ZlKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG5leHRCbG9jay0+Y29udGFpbnNG
bG9hdChmbG9hdGluZ0JveCkpCkBAIC0zOTgzLDcgKzM5ODMsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
Ojp1cGRhdGVMb2NhbEZsb2F0aW5nT2JqZWN0c0ZvclBhaW50aW5nQ29udGFpbmVyKFJlbmRlckJv
eCogZmxvYQogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CiAgICAgaWYgKCFtX2Zsb2F0aW5n
T2JqZWN0cykKICAgICAgICAgcmV0dXJuOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXRlcmF0b3IgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuZmluZDxSZW5kZXJCb3gqLCBGbG9h
dGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihmbG9hdFRvVXBkYXRlKTsKKyAgICBhdXRvIGl0ZXJh
dG9yID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmZpbmQ8UmVuZGVyQm94JiwgRmxvYXRpbmdP
YmplY3RIYXNoVHJhbnNsYXRvcj4oKmZsb2F0VG9VcGRhdGUpOwogICAgIGlmIChpdGVyYXRvciAh
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuZW5kKCkpIHsKICAgICAgICAgYm9vbCBzaG91bGRQ
YWludCA9ICFmb3VuZFBhaW50Q29udGFpbmVyICYmICFmbG9hdFRvVXBkYXRlLT5oYXNTZWxmUGFp
bnRpbmdMYXllcigpICYmIGZsb2F0VG9VcGRhdGUtPmVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXll
cigpID09IGVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpOwogICAgICAgICBmb3VuZFBhaW50
Q29udGFpbmVyIHw9IHNob3VsZFBhaW50OwpAQCAtNDE3NywxNSArNDE3NywxNSBAQCBib29sIFJl
bmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZQogICAgICAgICBhZGp1c3RlZExvY2F0aW9uICs9IHRvTGF5b3V0U2l6
ZSh0b1JlbmRlclZpZXcoKnRoaXMpLmZyYW1lVmlldygpLnNjcm9sbFBvc2l0aW9uKCkpOwogCiAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBm
bG9hdGluZ09iamVjdFNldC5iZWdpbigpOwotICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOyBpdCAhPSBiZWdpbjspIHsKKyAgICBh
dXRvIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKKyAgICBmb3IgKGF1dG8gaXQg
PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsgaXQgIT0gYmVnaW47KSB7CiAgICAgICAgIC0taXQ7
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKLSAgICAgICAg
aWYgKGZsb2F0aW5nT2JqZWN0LT5zaG91bGRQYWludCgpICYmICFmbG9hdGluZ09iamVjdC0+cmVu
ZGVyZXIoKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewotICAgICAgICAgICAgTGF5b3V0VW5p
dCB4T2Zmc2V0ID0geFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmpl
Y3QpIC0gZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCktPngoKTsKLSAgICAgICAgICAgIExheW91
dFVuaXQgeU9mZnNldCA9IHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGZsb2F0aW5n
T2JqZWN0KSAtIGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLT55KCk7CisgICAgICAgIEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGl0LT5nZXQoKTsKKyAgICAgICAgaWYgKGZsb2F0
aW5nT2JqZWN0LT5zaG91bGRQYWludCgpICYmICFmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5o
YXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBMYXlvdXRVbml0IHhPZmZzZXQg
PSB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdCkgLSBmbG9h
dGluZ09iamVjdC0+cmVuZGVyZXIoKS54KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IHlPZmZz
ZXQgPSB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdCkgLSBm
bG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS55KCk7CiAgICAgICAgICAgICBMYXlvdXRQb2ludCBj
aGlsZFBvaW50ID0gZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGVGb3JDaGlsZChmbG9hdGluZ09iamVj
dCwgYWRqdXN0ZWRMb2NhdGlvbiArIExheW91dFNpemUoeE9mZnNldCwgeU9mZnNldCkpOwotICAg
ICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLT5oaXRUZXN0KHJlcXVlc3Qs
IHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgY2hpbGRQb2ludCkpIHsKKyAgICAgICAgICAg
IGlmIChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwg
bG9jYXRpb25JbkNvbnRhaW5lciwgY2hpbGRQb2ludCkpIHsKICAgICAgICAgICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9M
YXlvdXRTaXplKGNoaWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0KQEAgLTYxMTAsMTMgKzYxMTAsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRq
dXN0Rm9yQm9yZGVyRml0KExheW91dFVuaXQgeCwgTGF5b3V0VW5pdCYgbGVmdCwgTGF5b3V0VW5p
dCYKICAgICAgICAgCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OworICAg
ICAgICAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAgICAgICAg
IGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQtPmdldCgpOwogICAg
ICAgICAgICAgICAgIC8vIE9ubHkgZXhhbWluZSB0aGUgb2JqZWN0IGlmIG91ciBtX3Nob3VsZFBh
aW50IGZsYWcgaXMgc2V0LgogICAgICAgICAgICAgICAgIGlmIChyLT5zaG91bGRQYWludCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRMZWZ0ID0geFBvc2l0aW9uRm9y
RmxvYXRJbmNsdWRpbmdNYXJnaW4ocikgLSByLT5yZW5kZXJlcigpLT54KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgZmxvYXRSaWdodCA9IGZsb2F0TGVmdCArIHItPnJlbmRlcmVy
KCktPndpZHRoKCk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRMZWZ0ID0g
eFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikgLSByLT5yZW5kZXJlcigpLngoKTsK
KyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBmbG9hdFJpZ2h0ID0gZmxvYXRMZWZ0ICsg
ci0+cmVuZGVyZXIoKS53aWR0aCgpOwogICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxl
ZnQsIGZsb2F0TGVmdCk7CiAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBm
bG9hdFJpZ2h0KTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCmluZGV4IDk4YWQzZmFjYjI4ODBmMDVkNjRlOGI1MzYxZmE3Nzg5MGNiODRkMDAu
LmI3Y2JkOWFkMzhkM2IwOTJhNWMwMjRiNzNhZmU4ZDVlY2MzNTVjMDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC02MTcsMTcgKzYxNywxNyBAQCBwcml2YXRlOgog
ICAgIExheW91dFVuaXQgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY29uc3QgRmxv
YXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gY2hpbGQtPngoKSArIGNoaWxkLT5y
ZW5kZXJlcigpLT5tYXJnaW5MZWZ0KCk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQtPngoKSAr
IGNoaWxkLT5yZW5kZXJlcigpLm1hcmdpbkxlZnQoKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkLT54KCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZC0+cmVuZGVy
ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQtPngoKSArIG1hcmdpbkJlZm9yZUZvckNo
aWxkKCZjaGlsZC0+cmVuZGVyZXIoKSk7CiAgICAgfQogICAgICAgICAKICAgICBMYXlvdXRVbml0
IHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBj
aGlsZCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KQotICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT55KCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChj
aGlsZC0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQtPnkoKSArIG1hcmdp
bkJlZm9yZUZvckNoaWxkKCZjaGlsZC0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHJldHVybiBjaGlsZC0+eSgpICsgY2hpbGQtPnJlbmRlcmVyKCktPm1hcmdpblRvcCgp
OworICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT55KCkgKyBjaGlsZC0+cmVuZGVyZXIoKS5tYXJn
aW5Ub3AoKTsKICAgICB9CiAKICAgICBMYXlvdXRQb2ludCBjb21wdXRlTG9naWNhbExvY2F0aW9u
Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZz
ZXQpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cAppbmRleCAwODAyYTMxYTI0YWY3NTZjZGQ3NTdmNWQyMzI1YTMzYjUzOWMwNDdmLi4xOGI5ZmNh
ZjYxZDQ2MDlmYjAyZTYyNWRiZTFiZDA1OGU1MDJiYjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtOTIsMTEgKzkyLDExIEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjpjbGVhckZsb2F0cygpCiAgICAgSGFzaFNldDxSZW5kZXJCb3gqPiBvbGRJ
bnRydWRpbmdGbG9hdFNldDsKICAgICBpZiAoIWNoaWxkcmVuSW5saW5lKCkgJiYgbV9mbG9hdGlu
Z09iamVjdHMpIHsKICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2Jq
ZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGlu
Z09iamVjdCA9ICppdDsKKyAgICAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmpl
Y3QgPSBpdC0+Z2V0KCk7CiAgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rlc2Nl
bmRhbnQoKSkKLSAgICAgICAgICAgICAgICBvbGRJbnRydWRpbmdGbG9hdFNldC5hZGQoZmxvYXRp
bmdPYmplY3QtPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgIG9sZEludHJ1ZGluZ0Zsb2F0
U2V0LmFkZCgmZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0xNjAsMTAgKzE2MCwxMCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9hdHMo
KQogICAgICAgICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0Ojpt
aW4oKTsKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAgICAgICBjb25z
dCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7Ci0gICAgICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIG9sZEZsb2F0aW5nT2JqZWN0ID0gZmxvYXRNYXAuZ2V0KGYt
PnJlbmRlcmVyKCkpOworICAgICAgICAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
ID0gaXQtPmdldCgpOworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09i
amVjdD4gb2xkRmxvYXRpbmdPYmplY3QgPSBmbG9hdE1hcC50YWtlKCZmLT5yZW5kZXJlcigpKTsK
ICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBmLT5sb2dpY2FsQm90
dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwogICAgICAgICAgICAgICAgIGlmIChvbGRG
bG9hdGluZ09iamVjdCkgewogICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2lj
YWxCb3R0b20gPSBvbGRGbG9hdGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKTsKQEAgLTE4MywxMiArMTgzLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjpjbGVhckZsb2F0cygpCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBmbG9hdE1hcC5yZW1vdmUoZi0+cmVuZGVy
ZXIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09iamVjdC0+b3JpZ2lu
YXRpbmdMaW5lKCkgJiYgIXNlbGZOZWVkc0xheW91dCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoJm9sZEZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUoKS0+cmVuZGVy
ZXIoKSA9PSB0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEZsb2F0aW5nT2JqZWN0
LT5vcmlnaW5hdGluZ0xpbmUoKS0+bWFya0RpcnR5KCk7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9sZEZsb2F0aW5nT2JqZWN0OwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAw
OwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxv
Z2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwpAQCAtMTk2LDE1ICsxOTQsMTQgQEAgdm9pZCBS
ZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIFJlbmRlcmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0TWFw
LmVuZCgpOwotICAgICAgICBmb3IgKFJlbmRlcmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGl0
ID0gZmxvYXRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBGbG9h
dGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAoKml0KS52YWx1ZTsKKyAgICAgICAgYXV0byBl
bmQgPSBmbG9hdE1hcC5lbmQoKTsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRNYXAuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxv
YXRpbmdPYmplY3QgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIWZsb2F0aW5n
T2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkgewogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxU
b3AgPSAwOwogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdl
TG9naWNhbEJvdHRvbSwgZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRlbGV0
ZUFsbFZhbHVlcyhmbG9hdE1hcCk7CiAKICAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFu
Z2UoY2hhbmdlTG9naWNhbFRvcCwgY2hhbmdlTG9naWNhbEJvdHRvbSk7CiAgICAgfSBlbHNlIGlm
ICghb2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKSB7CkBAIC0yMTQsOSArMjExLDkgQEAg
dm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRzKCkKICAgICAgICAgICAgIG1hcmtBbGxE
ZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICAgICAgZm9yIChGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0g
ZW5kICYmICFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCk7ICsraXQpCi0gICAgICAgICAg
ICAgICAgb2xkSW50cnVkaW5nRmxvYXRTZXQucmVtb3ZlKCgqaXQpLT5yZW5kZXJlcigpKTsKKyAg
ICAgICAgICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgICAg
ICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQgJiYg
IW9sZEludHJ1ZGluZ0Zsb2F0U2V0LmlzRW1wdHkoKTsgKytpdCkKKyAgICAgICAgICAgICAgICBv
bGRJbnRydWRpbmdGbG9hdFNldC5yZW1vdmUoJigqaXQpLT5yZW5kZXJlcigpKTsKICAgICAgICAg
ICAgIGlmICghb2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAg
IG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApp
bmRleCAyOTRlYTg4MjQ0ZjUwNjFmYWQyMDM5OWFkZjMxNWFhM2JjYmY3MTYzLi5mYWU5MjQ0MTBm
ZDVkY2VjNWY0MjE0ZDU2MTQxYzJlMjUwN2M1ZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtMTA3Miw3ICsxMDcyLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6YXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKIHsKICAgICBBU1NFUlQoIWZsb2F0aW5nT2JqZWN0
LT5vcmlnaW5hdGluZ0xpbmUoKSk7CiAgICAgZmxvYXRpbmdPYmplY3QtPnNldE9yaWdpbmF0aW5n
TGluZShsYXN0Um9vdEJveCgpKTsKLSAgICBsYXN0Um9vdEJveCgpLT5hcHBlbmRGbG9hdChmbG9h
dGluZ09iamVjdC0+cmVuZGVyZXIoKSk7CisgICAgbGFzdFJvb3RCb3goKS0+YXBwZW5kRmxvYXQo
JmZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKTsKIH0KIAogLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGEgQmlkaVN0YXR1cyBjb25zdHJ1Y3RvciBvciBjcmVhdGUgbWV0aG9kLgpAQCAtMTI4MCw3
ICsxMjgwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5
b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGkKICAgICB9CiAKICAgICBpZiAoY29u
dGFpbnNGbG9hdHMoKSkKLSAgICAgICAgbGF5b3V0U3RhdGUuc2V0TGFzdEZsb2F0KG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKS5sYXN0KCkpOworICAgICAgICBsYXlvdXRTdGF0ZS5zZXRMYXN0Rmxv
YXQobV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKS5nZXQoKSk7CiAKICAgICAvLyBXZSBh
bHNvIGZpbmQgdGhlIGZpcnN0IGNsZWFuIGxpbmUgYW5kIGV4dHJhY3QgdGhlc2UgbGluZXMuICBX
ZSB3aWxsIGFkZCB0aGVtIGJhY2sKICAgICAvLyBpZiB3ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBh
YmxlIHRvIHN5bmNocm9uaXplIGFmdGVyIGhhbmRsaW5nIGFsbCBvdXIgZGlydHkgbGluZXMuCkBA
IC0xNTM4LDcgKzE1MzgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRz
SW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbgogCiAgICAgICAgIGNv
bnN0IElubGluZUl0ZXJhdG9yIG9sZEVuZCA9IGVuZDsKICAgICAgICAgYm9vbCBpc05ld1VCQVBh
cmFncmFwaCA9IGxheW91dFN0YXRlLmxpbmVJbmZvKCkucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5
KCk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0g
KGNvbnRhaW5zRmxvYXRzKCkpID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSA6IDA7
CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gKGNv
bnRhaW5zRmxvYXRzKCkpID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKS5nZXQoKSA6
IDA7CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAgdXBkYXRlU2hhcGVBbmRTZWdt
ZW50c0ZvckN1cnJlbnRMaW5lKHNoYXBlSW5zaWRlSW5mbywgbG9naWNhbE9mZnNldEZyb21TaGFw
ZUNvbnRhaW5lciwgbGF5b3V0U3RhdGUpOwpAQCAtMTYzOCwyNCArMTYzOCwyNCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxh
eW91dFN0YXRlLCBJbmxpbgogCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0
Um9vdEJveCgpKSB7CiAgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKLSAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCk7CisgICAgICAgICAgICBhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsKKyAgICAgICAgICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAg
ICAgICAgICBpZiAobGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpIHsKLSAgICAgICAgICAgICAgICBG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmpl
Y3RTZXQuZmluZChsYXlvdXRTdGF0ZS5sYXN0RmxvYXQoKSk7CisgICAgICAgICAgICAgICAgYXV0
byBsYXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8RmxvYXRpbmdPYmpl
Y3QmLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigqbGF5b3V0U3RhdGUubGFzdEZsb2F0
KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBlbmQpOwog
ICAgICAgICAgICAgICAgICsrbGFzdEZsb2F0SXRlcmF0b3I7CiAgICAgICAgICAgICAgICAgaXQg
PSBsYXN0RmxvYXRJdGVyYXRvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICpp
dDsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IGl0LT5nZXQoKTsKICAgICAg
ICAgICAgICAgICBhcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoZik7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKGYtPnJlbmRlcmVyKCkgPT0gbGF5b3V0U3RhdGUuZmxvYXRzKClbbGF5b3V0
U3RhdGUuZmxvYXRJbmRleCgpXS5vYmplY3QpOworICAgICAgICAgICAgICAgIEFTU0VSVCgmZi0+
cmVuZGVyZXIoKSA9PSBsYXlvdXRTdGF0ZS5mbG9hdHMoKVtsYXlvdXRTdGF0ZS5mbG9hdEluZGV4
KCldLm9iamVjdCk7CiAgICAgICAgICAgICAgICAgLy8gSWYgYSBmbG9hdCdzIGdlb21ldHJ5IGhh
cyBjaGFuZ2VkLCBnaXZlIHVwIG9uIHN5bmNpbmcgd2l0aCBjbGVhbiBsaW5lcy4KICAgICAgICAg
ICAgICAgICBpZiAobGF5b3V0U3RhdGUuZmxvYXRzKClbbGF5b3V0U3RhdGUuZmxvYXRJbmRleCgp
XS5yZWN0ICE9IGYtPmZyYW1lUmVjdCgpKQogICAgICAgICAgICAgICAgICAgICBjaGVja0ZvckVu
ZExpbmVNYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLnNldEZsb2F0
SW5kZXgobGF5b3V0U3RhdGUuZmxvYXRJbmRleCgpICsgMSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBsYXlvdXRTdGF0ZS5zZXRMYXN0RmxvYXQoIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1w
dHkoKSA/IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKSA6IDApOworICAgICAgICAgICAgbGF5b3V0
U3RhdGUuc2V0TGFzdEZsb2F0KCFmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkgPyBmbG9hdGlu
Z09iamVjdFNldC5sYXN0KCkuZ2V0KCkgOiBudWxscHRyKTsKICAgICAgICAgfQogCiAgICAgICAg
IGxpbmVNaWRwb2ludFN0YXRlLnJlc2V0KCk7CkBAIC0xNzgzLDE3ICsxNzgzLDE3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxpbmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlKQogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKLSAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKKyAgICAgICAgYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CisgICAg
ICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgIGlmIChsYXlv
dXRTdGF0ZS5sYXN0RmxvYXQoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBsYXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQobGF5b3V0U3Rh
dGUubGFzdEZsb2F0KCkpOworICAgICAgICAgICAgYXV0byBsYXN0RmxvYXRJdGVyYXRvciA9IGZs
b2F0aW5nT2JqZWN0U2V0LmZpbmQ8RmxvYXRpbmdPYmplY3QmLCBGbG9hdGluZ09iamVjdEhhc2hU
cmFuc2xhdG9yPigqbGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpOwogICAgICAgICAgICAgQVNTRVJU
KGxhc3RGbG9hdEl0ZXJhdG9yICE9IGVuZCk7CiAgICAgICAgICAgICArK2xhc3RGbG9hdEl0ZXJh
dG9yOwogICAgICAgICAgICAgaXQgPSBsYXN0RmxvYXRJdGVyYXRvcjsKICAgICAgICAgfQogICAg
ICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgYXBwZW5kRmxvYXRpbmdP
YmplY3RUb0xhc3RMaW5lKCppdCk7Ci0gICAgICAgIGxheW91dFN0YXRlLnNldExhc3RGbG9hdCgh
ZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpIDog
MCk7CisgICAgICAgICAgICBhcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoaXQtPmdldCgp
KTsKKyAgICAgICAgbGF5b3V0U3RhdGUuc2V0TGFzdEZsb2F0KCFmbG9hdGluZ09iamVjdFNldC5p
c0VtcHR5KCkgPyBmbG9hdGluZ09iamVjdFNldC5sYXN0KCkuZ2V0KCkgOiBudWxscHRyKTsKICAg
ICB9CiB9CiAKQEAgLTIxMzksOSArMjEzOSw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmNoZWNrUGFn
aW5hdGlvbkFuZEZsb2F0c0F0RW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlCiAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmxpbmVCb3R0b21XaXRoTGVh
ZGluZygpICsgYWJzb2x1dGVWYWx1ZShsaW5lRGVsdGEpOwogCiAgICAgY29uc3QgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwot
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBmID0gKml0OworICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAg
Zm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gaXQtPmdldCgpOwogICAgICAgICBpZiAo
Zi0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSA+PSBsb2dpY2FsVG9w
ICYmIGYtPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgPCBsb2dpY2Fs
Qm90dG9tKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTM0MDMsNyArMzQw
Myw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdP
YmplY3QqIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwotICAgIEFTU0VSVChmbG9hdGluZ09iamVjdFNldC5sYXN0KCkgPT0g
bmV3RmxvYXQpOworICAgIEFTU0VSVChmbG9hdGluZ09iamVjdFNldC5sYXN0KCkuZ2V0KCkgPT0g
bmV3RmxvYXQpOwogCiAgICAgTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxUb3AgPSBuZXdGbG9hdC0+
bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKICAgICBpbnQgcGFnaW5hdGlv
blN0cnV0ID0gbmV3RmxvYXQtPnBhZ2luYXRpb25TdHJ1dCgpOwpAQCAtMzQxMSwxNyArMzQxMSwx
NyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2Jq
ZWN0KiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplYwogICAgIGlmIChmbG9hdExvZ2ljYWxUb3AgLSBw
YWdpbmF0aW9uU3RydXQgIT0gbG9naWNhbEhlaWdodCgpICsgbGluZUluZm8uZmxvYXRQYWdpbmF0
aW9uU3RydXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgYXV0byBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIC0taXQ7IC8vIExhc3QgZmxvYXQgaXMgbmV3Rmxv
YXQsIHNraXAgdGhhdCBvbmUuCi0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9
IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CisgICAgYXV0byBiZWdpbiA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmJlZ2luKCk7CiAgICAgd2hpbGUgKGl0ICE9IGJlZ2luKSB7CiAgICAgICAgIC0taXQ7
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OworICAgICAgICBGbG9hdGluZ09iamVj
dCogZiA9IGl0LT5nZXQoKTsKICAgICAgICAgaWYgKGYgPT0gbGFzdEZsb2F0RnJvbVByZXZpb3Vz
TGluZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoZi0+bG9naWNhbFRvcChpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKSA9PSBsb2dpY2FsSGVpZ2h0KCkgKyBsaW5lSW5mby5mbG9h
dFBhZ2luYXRpb25TdHJ1dCgpKSB7CiAgICAgICAgICAgICBmLT5zZXRQYWdpbmF0aW9uU3RydXQo
cGFnaW5hdGlvblN0cnV0ICsgZi0+cGFnaW5hdGlvblN0cnV0KCkpOwotICAgICAgICAgICAgUmVu
ZGVyQm94KiBvID0gZi0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIFJlbmRlckJveCogbyA9ICZm
LT5yZW5kZXJlcigpOwogICAgICAgICAgICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKG8sIGxvZ2lj
YWxUb3BGb3JDaGlsZChvKSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKG8pICsgcGFnaW5hdGlvblN0
cnV0KTsKICAgICAgICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkpCiAgICAgICAgICAgICAg
ICAgdG9SZW5kZXJCbG9jayhvKS0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRo
aXMpOwo=
</data>
<flag name="review"
          id="234649"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>