<?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>30342</bug_id>
          
          <creation_ts>2009-10-13 14:43:24 -0700</creation_ts>
          <short_desc>Eliminate the use of String::format</short_desc>
          <delta_ts>2019-03-01 21:57:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=188191</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=37327</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=143773</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>47664</dependson>
    
    <dependson>47714</dependson>
    
    <dependson>56099</dependson>
    
    <dependson>108883</dependson>
    
    <dependson>151250</dependson>
    
    <dependson>176035</dependson>
    
    <dependson>177028</dependson>
    
    <dependson>187955</dependson>
    
    <dependson>192742</dependson>
    
    <dependson>192746</dependson>
    
    <dependson>194485</dependson>
    
    <dependson>194487</dependson>
    
    <dependson>194752</dependson>
    
    <dependson>194893</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Evan Martin">evan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ademar</cc>
    
    <cc>ap</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>jmalonzo</cc>
    
    <cc>krit</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>nwtour</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>154436</commentid>
    <comment_count>0</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2009-10-13 14:43:24 -0700</bug_when>
    <thetext>String::format relies internally on printf(), which is in turn affected by the system locale in how it handles decimal separators, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154437</commentid>
    <comment_count>1</comment_count>
      <attachid>41129</attachid>
    <who name="Evan Martin">evan</who>
    <bug_when>2009-10-13 14:44:46 -0700</bug_when>
    <thetext>Created attachment 41129
patch written by Alp Toker

In https://bugs.webkit.org/show_bug.cgi?id=18994 , Darin Adler r-&apos;d this patch, but it is a step in the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164489</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-11-18 01:02:35 -0800</bug_when>
    <thetext>*** Bug 31514 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164491</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-11-18 01:03:28 -0800</bug_when>
    <thetext>*** Bug 18985 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300566</commentid>
    <comment_count>4</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-10-27 14:19:38 -0700</bug_when>
    <thetext>Please don&apos;t forget of WebKit2, String::format() is used, for example, in the LocalizationStrategy:

WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501642</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-03 11:18:13 -0800</bug_when>
    <thetext>We’ve reduced the number of call sites using String::format, but there are still quite a few left.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501653</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-02-03 12:02:23 -0800</bug_when>
    <thetext>Darin, was the dependency on bug #176305 a mistake? It looks unrelated?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501655</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-03 12:16:27 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #6)
&gt; Darin, was the dependency on bug #176305 a mistake? It looks unrelated?

Yes, typo in bug number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501656</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-03 12:18:11 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; (In reply to Michael Catanzaro from comment #6)
&gt; &gt; Darin, was the dependency on bug #176305 a mistake? It looks unrelated?
&gt; 
&gt; Yes, typo in bug number.

Corrected, it should have been bug 176035.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501659</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-03 12:26:32 -0800</bug_when>
    <thetext>The scope of this bug is too narrow. I think what we really want to do is to eliminate WebKit project use of C library formatting functions in the printf family. Eliminating String::format is a necessary part of this, but not sufficient to cover the whole task. At some point we might want a bug about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501720</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-02-03 18:27:24 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; The scope of this bug is too narrow. I think what we really want to do is to
&gt; eliminate WebKit project use of C library formatting functions in the printf
&gt; family. Eliminating String::format is a necessary part of this, but not
&gt; sufficient to cover the whole task. At some point we might want a bug about
&gt; that.

E.g. our logging functions make heavy use of format specifiers. On Unix they boil down to fprintf(stderr, ...) but it takes some investigation every time I need to discover that.

I push a lot of commits changing &quot;%llu&quot; to &quot;%&quot; PRIu64. uint64_t is long long unsigned int on Mac but just long unsigned int on Linux, so using %llu is an error. That&apos;s just one example of an annoying difference. Another: Mac has format specifiers that fprintf doesn&apos;t accept, e.g. %{private} or something like that. Logging will be a lot more annoying to do without formats, but safer indeed....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509616</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-25 06:45:22 -0800</bug_when>
    <thetext>After r242014 &lt;https://trac.webkit.org/changeset/242014&gt;, String::format itself is now gone. But as Michael mentions above, logging is still using the former implementation of String::format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511774</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-03-01 21:57:39 -0800</bug_when>
    <thetext>Relanded in &lt;https://trac.webkit.org/changeset/242308&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41129</attachid>
            <date>2009-10-13 14:44:46 -0700</date>
            <delta_ts>2010-06-10 19:41:00 -0700</delta_ts>
            <desc>patch written by Alp Toker</desc>
            <filename>string-format.patch</filename>
            <type>text/plain</type>
            <size>34861</size>
            <attacher name="Evan Martin">evan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjUwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzIgQEAKKzIwMDgtMDktMTYgIEFscCBUb2tlciAgPGFscEBudWFudGkuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODk5NAorICAgICAgICBMQU5HL0xDX0FM
TCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YgZWxlbWVudC5zdHlsZS5vcGFjaXR5CisKKyAgICAg
ICAgVXNlIFVTdHJpbmc6OmZyb20oKSBpbnN0ZWFkIG9mIFN0cmluZzo6Zm9ybWF0KCkgaW4gU3Ry
aW5nOjpudW1iZXIoKQorICAgICAgICBmdW5jdGlvbnMgd2hlcmUgcG9zc2libGUuCisKKyAgICAg
ICAgU3RhcnQgdG8gcmVwbGFjZSB1c2VzIG9mIFN0cmluZzo6Zm9ybWF0KCkgaW4gV2ViQ29yZSB3
aXRoCisgICAgICAgIFN0cmluZ0J1aWxkZXIgYW5kIGRpcmVjdCBjb25jYXRlbmF0aW9uLgorCisg
ICAgICAgIEFzIGEgc2lkZS1lZmZlY3QsIHNldmVyYWwgaW5jb3JyZWN0IG9yIG5lZWRsZXNzIHN0
cmluZyBjb252ZXJzaW9ucworICAgICAgICB0aGF0IHdlcmUgZG9uZSBieSBTdHJpbmc6OmZvcm1h
dCgpIGNhbGxlcnMgYXJlIG5vdyBhdm9pZGVkLgorCisgICAgICAgIFN0cmluZzo6Zm9ybWF0KCkg
c2hvdWxkIG5vdCBiZSB1c2VkIGluIG5ldyBjb2RlLgorCisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6
Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UpOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRp
dmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4
dCk6CisgICAgICAgICogZG9tL0V4Y2VwdGlvbkJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXhjZXB0aW9uQmFzZTo6RXhjZXB0aW9uQmFzZSk6CisgICAgICAgICogZG9tL1hNTFRva2VuaXpl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OmhhbmRsZUVycm9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6aW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2spOgor
ICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvRG9jTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY0xvYWRlcjo6cHJpbnRBY2Nlc3NEZW5pZWRNZXNz
YWdlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnNob3VsZEFsbG93TmF2aWdhdGlvbik6CisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpwb3N0TWVzc2FnZVRp
bWVyRmlyZWQpOgorICAgICAgICAqIHBhZ2UvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpjb3VudCk6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9TdHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpudW1iZXIp
OgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblN0cmVhbTo6c3RhcnRTdHJlYW0pOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFRl
bXBsYXRlLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2Vn
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnU2luZ2xlQ29vcmQ6OnRvU3RyaW5nKToK
KyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0FyYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU2VnQXJjOjp0b1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdBcmMuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljOjp0b1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWMuaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoOjp0b1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGguaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWM6OnRvU3RyaW5nKToKKyAg
ICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaDoKKyAgICAgICAgKiBzdmcv
U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
ZWdMaW5ldG9Ib3Jpem9udGFsOjp0b1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsOjp0b1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnZhbHVlQXNTdHJpbmcpOgorICAgICAgICAqIHN2Zy9T
VkdUcmFuc2Zvcm1MaXN0LmNwcDoKKyAgICAgICAgKFNWR1RyYW5zZm9ybUxpc3Q6OnZhbHVlQXNT
dHJpbmcpOgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmR1bXBJbnN0YW5jZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6
YnVpbGRQZW5kaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6
ZXhwYW5kVXNlRWxlbWVudHNJblNoYWRvd1RyZWUpOgorCiAyMDA4LTA5LTE1ICBSb2IgQnVpcyAg
PGJ1aXNAa2RlLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljLgpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzY0OTcpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDcgKzI0LDYgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKIAogI2luY2x1ZGUgIkJh
c2U2NC5oIgotI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5j
bHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgpAQCAtNzgzLDggKzc4Miwx
MiBAQCBTdHJpbmcgSlNET01XaW5kb3dCYXNlOjpjcm9zc0RvbWFpbkFjY2VzCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAogICAgIC8vIEZJWE1FOiB0aGlzIGVycm9yIG1lc3NhZ2Ugc2hvdWxk
IGNvbnRhaW4gbW9yZSBzcGVjaWZpY3Mgb2Ygd2h5IHRoZSBzYW1lIG9yaWdpbiBjaGVjayBoYXMg
ZmFpbGVkLgotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiVW5zYWZlIEphdmFTY3JpcHQgYXR0
ZW1wdCB0byBhY2Nlc3MgZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3aXRoIFVSTCAlcy4g
RG9tYWlucywgcHJvdG9jb2xzIGFuZCBwb3J0cyBtdXN0IG1hdGNoLlxuIiwKLSAgICAgICAgdGFy
Z2V0VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG9yaWdpblVSTC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICBTdHJpbmcgbWVzc2FnZSA9ICJVbnNhZmUgSmF2YVNjcmlwdCBhdHRlbXB0
IHRvIGFjY2VzcyBmcmFtZSB3aXRoIFVSTCAiOworICAgIG1lc3NhZ2UgKz0gdGFyZ2V0VVJMLnN0
cmluZygpOworICAgIG1lc3NhZ2UgKz0gIiBmcm9tIGZyYW1lIHdpdGggVVJMICI7CisgICAgbWVz
c2FnZSArPSBvcmlnaW5VUkwuc3RyaW5nKCk7CisgICAgbWVzc2FnZSArPSAiLiBEb21haW5zLCBw
cm90b2NvbHMgYW5kIHBvcnRzIG11c3QgbWF0Y2guXG4iOworICAgIHJldHVybiBtZXNzYWdlOwog
fQogCiB2b2lkIEpTRE9NV2luZG93QmFzZTo6cHJpbnRFcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKSBjb25zdApJbmRleDogV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkocmV2aXNp
b24gMzY0OTcpCisrKyBXZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02MjMs
NTIgKzYyNCw1MiBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQoKSBjb25zCiAg
ICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgICAgICB0ZXh0
ID0gU3RyaW5nOjpmb3JtYXQoIiUuNmxnJSUiLCBtX3ZhbHVlLm51bSk7CisgICAgICAgICAgICB0
ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgIiUiOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTX0VNUzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6OmZv
cm1hdCgiJS42bGdlbSIsIG1fdmFsdWUubnVtKTsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6
Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZW0iOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ1NTX0VYUzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6OmZvcm1hdCgiJS42bGdl
eCIsIG1fdmFsdWUubnVtKTsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3Zh
bHVlLm51bSkgKyAiZXgiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1BY
OgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIlLjZsZ3B4IiwgbV92YWx1ZS5u
dW0pOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJw
eCI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfQ006Ci0gICAgICAgICAg
ICB0ZXh0ID0gU3RyaW5nOjpmb3JtYXQoIiUuNmxnY20iLCBtX3ZhbHVlLm51bSk7CisgICAgICAg
ICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImNtIjsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19NTToKLSAgICAgICAgICAgIHRleHQgPSBTdHJp
bmc6OmZvcm1hdCgiJS42bGdtbSIsIG1fdmFsdWUubnVtKTsKKyAgICAgICAgICAgIHRleHQgPSBT
dHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAibW0iOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQ1NTX0lOOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIl
LjZsZ2luIiwgbV92YWx1ZS5udW0pOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVy
KG1fdmFsdWUubnVtKSArICJpbiI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NfUFQ6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpmb3JtYXQoIiUuNmxncHQiLCBtX3Zh
bHVlLm51bSk7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0p
ICsgInB0IjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19QQzoKLSAgICAg
ICAgICAgIHRleHQgPSBTdHJpbmc6OmZvcm1hdCgiJS42bGdwYyIsIG1fdmFsdWUubnVtKTsKKyAg
ICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicGMiOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX0RFRzoKLSAgICAgICAgICAgIHRleHQg
PSBTdHJpbmc6OmZvcm1hdCgiJS42bGdkZWciLCBtX3ZhbHVlLm51bSk7CisgICAgICAgICAgICB0
ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImRlZyI7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDU1NfUkFEOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6
Zm9ybWF0KCIlLjZsZ3JhZCIsIG1fdmFsdWUubnVtKTsKKyAgICAgICAgICAgIHRleHQgPSBTdHJp
bmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicmFkIjsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU19HUkFEOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIl
LjZsZ2dyYWQiLCBtX3ZhbHVlLm51bSk7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1i
ZXIobV92YWx1ZS5udW0pICsgImdyYWQiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1NTX01TOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIlLjZsZ21zIiwg
bV92YWx1ZS5udW0pOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUu
bnVtKSArICJtcyI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfUzoKLSAg
ICAgICAgICAgIHRleHQgPSBTdHJpbmc6OmZvcm1hdCgiJS42bGdzIiwgbV92YWx1ZS5udW0pOwor
ICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJzIjsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19IWjoKLSAgICAgICAgICAgIHRleHQg
PSBTdHJpbmc6OmZvcm1hdCgiJS42bGdoeiIsIG1fdmFsdWUubnVtKTsKKyAgICAgICAgICAgIHRl
eHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiaHoiOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTX0tIWjoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6OmZv
cm1hdCgiJS42bGdraHoiLCBtX3ZhbHVlLm51bSk7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5n
OjpudW1iZXIobV92YWx1ZS5udW0pICsgImtoeiI7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NfRElNRU5TSU9OOgogICAgICAgICAgICAgLy8gRklYTUUKSW5kZXg6IFdlYkNv
cmUvZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V4Y2Vw
dGlvbkJhc2UuY3BwCShyZXZpc2lvbiAzNjQ5NykKKysrIFdlYkNvcmUvZG9tL0V4Y2VwdGlvbkJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBAIEV4Y2VwdGlvbkJhc2U6OkV4
Y2VwdGlvbkJhc2UoY29uc3QgRXhjZXAKICAgICAsIG1fbmFtZShkZXNjcmlwdGlvbi5uYW1lKQog
ewogICAgIGlmIChkZXNjcmlwdGlvbi5uYW1lKQotICAgICAgICBtX21lc3NhZ2UgPSBTdHJpbmc6
OmZvcm1hdCgiJXM6ICVzIEV4Y2VwdGlvbiAlZCIsIGRlc2NyaXB0aW9uLm5hbWUsIGRlc2NyaXB0
aW9uLnR5cGVOYW1lLCBkZXNjcmlwdGlvbi5jb2RlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fbWVz
c2FnZSA9IFN0cmluZzo6Zm9ybWF0KCIlcyBFeGNlcHRpb24gJWQiLCBkZXNjcmlwdGlvbi50eXBl
TmFtZSwgZGVzY3JpcHRpb24uY29kZSk7CisgICAgICAgIG1fbWVzc2FnZSA9IFN0cmluZyhkZXNj
cmlwdGlvbi5uYW1lKSArICI6ICI7CisKKyAgICBtX21lc3NhZ2UgKz0gU3RyaW5nKGRlc2NyaXB0
aW9uLnR5cGVOYW1lKSArICIgRXhjZXB0aW9uICIgKyBTdHJpbmc6Om51bWJlcihkZXNjcmlwdGlv
bi5jb2RlKTsKIH0KIAogU3RyaW5nIEV4Y2VwdGlvbkJhc2U6OnRvU3RyaW5nKCkgY29uc3QKSW5k
ZXg6IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vWE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMzY0OTcpCisrKyBXZWJDb3JlL2RvbS9YTUxU
b2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEzMDAsMTIgKzEzMDEsMTgg
QEAgdm9pZCBYTUxUb2tlbml6ZXI6OmhhbmRsZUVycm9yKEVycm9yVHlwZQogICAgIGlmICh0eXBl
ID09IGZhdGFsIHx8IChtX2Vycm9yQ291bnQgPCBtYXhFcnJvcnMgJiYgbV9sYXN0RXJyb3JMaW5l
ICE9IGxpbmVOdW1iZXIgJiYgbV9sYXN0RXJyb3JDb2x1bW4gIT0gY29sdW1uTnVtYmVyKSkgewog
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgIGNhc2Ugd2FybmluZzoKLSAgICAg
ICAgICAgICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gU3RyaW5nOjpmb3JtYXQoIndhcm5pbmcgb24g
bGluZSAlZCBhdCBjb2x1bW4gJWQ6ICVzIiwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBtKTsK
KyAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZXMuYXBwZW5kKCJ3YXJuaW5nIik7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIGZhdGFsOgogICAgICAgICAgICAg
Y2FzZSBub25GYXRhbDoKLSAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gU3RyaW5n
Ojpmb3JtYXQoImVycm9yIG9uIGxpbmUgJWQgYXQgY29sdW1uICVkOiAlcyIsIGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlciwgbSk7CisgICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2VzLmFwcGVu
ZCgiZXJyb3IiKTsKICAgICAgICAgfQorICAgICAgICBtX2Vycm9yTWVzc2FnZXMuYXBwZW5kKCIg
b24gbGluZSAiKTsKKyAgICAgICAgbV9lcnJvck1lc3NhZ2VzLmFwcGVuZChTdHJpbmc6Om51bWJl
cihsaW5lTnVtYmVyKSk7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlcy5hcHBlbmQoIiBhdCBjb2x1
bW4gIik7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlcy5hcHBlbmQoU3RyaW5nOjpudW1iZXIoY29s
dW1uTnVtYmVyKSk7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlcy5hcHBlbmQoIjogIik7CisgICAg
ICAgIG1fZXJyb3JNZXNzYWdlcy5hcHBlbmQobSk7CiAgICAgICAgIAogICAgICAgICBtX2xhc3RF
cnJvckxpbmUgPSBsaW5lTnVtYmVyOwogICAgICAgICBtX2xhc3RFcnJvckNvbHVtbiA9IGNvbHVt
bk51bWJlcjsKQEAgLTE0OTksNyArMTUwNiw3IEBAIHZvaWQgWE1MVG9rZW5pemVyOjppbnNlcnRF
cnJvck1lc3NhZ2VCbG8KICAgICB9CiAjZW5kaWYKIAotICAgIFJlZlB0cjxFbGVtZW50PiByZXBv
cnRFbGVtZW50ID0gY3JlYXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcihkb2MsIG1fZXJyb3JNZXNz
YWdlcyk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHJlcG9ydEVsZW1lbnQgPSBjcmVhdGVYSFRNTFBh
cnNlckVycm9ySGVhZGVyKGRvYywgbV9lcnJvck1lc3NhZ2VzLnRvU3RyaW5nKCkpOwogICAgIGRv
Y3VtZW50RWxlbWVudC0+aW5zZXJ0QmVmb3JlKHJlcG9ydEVsZW1lbnQsIGRvY3VtZW50RWxlbWVu
dC0+Zmlyc3RDaGlsZCgpLCBlYyk7CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgaWYgKGRvYy0+dHJh
bnNmb3JtU291cmNlRG9jdW1lbnQoKSkgewpJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgJKHJldmlzaW9uIDM2
NDk3KQorKysgV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCisj
aW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNs
dWRlICJUb2tlbml6ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMTUzLDcgKzE1
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IG1fZXJyb3JDb3VudDsKICAg
ICAgICAgaW50IG1fbGFzdEVycm9yTGluZTsKICAgICAgICAgaW50IG1fbGFzdEVycm9yQ29sdW1u
OwotICAgICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2VzOworICAgICAgICBTdHJpbmdCdWlsZGVy
IG1fZXJyb3JNZXNzYWdlczsKIAogICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRT
Y3JpcHQ+IG1fcGVuZGluZ1NjcmlwdDsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0
RWxlbWVudDsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAkocmV2aXNpb24gMzY0OTcpCisrKyBXZWJD
b3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBA
CiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVl
dC5oIgogI2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgpAQCAtMjExLDEzICsyMTAsMTMgQEAgdm9pZCBEb2NMb2FkZXI6OnByaW50QWNjZXNzRGVuaWVk
TWVzc2FnZQogICAgIGlmICghc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0Vu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIG1lc3NhZ2UgPSBtX2RvYy0+
dXJsKCkuaXNOdWxsKCkgPwotICAgICAgICBTdHJpbmc6OmZvcm1hdCgiVW5zYWZlIGF0dGVtcHQg
dG8gbG9hZCBVUkwgJXMuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdXJsLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpIDoKLSAgICAgICAgU3RyaW5nOjpmb3JtYXQoIlVuc2FmZSBhdHRlbXB0IHRv
IGxvYWQgVVJMICVzIGZyb20gZnJhbWUgd2l0aCBVUkwgJXMuICIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIkRvbWFpbnMsIHByb3RvY29scyBhbmQgcG9ydHMgbXVzdCBtYXRjaC5cbiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLAotICAgICAgICAg
ICAgICAgICAgICAgICBtX2RvYy0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
U3RyaW5nIG1lc3NhZ2UgPSAiVW5zYWZlIGF0dGVtcHQgdG8gbG9hZCBVUkwgIiArIHVybC5zdHJp
bmcoKTsKKyAgICBpZiAobV9kb2MtPnVybCgpLmlzTnVsbCgpKQorICAgICAgICBtZXNzYWdlICs9
ICIuIjsKKyAgICBlbHNlIHsKKyAgICAgICAgbWVzc2FnZSArPSAiIGZyb20gZnJhbWUgd2l0aCBV
UkwgIiArIG1fZG9jLT51cmwoKS5zdHJpbmcoKTsKKyAgICAgICAgbWVzc2FnZSArPSAiLiBEb21h
aW5zLCBwcm90b2NvbHMgYW5kIHBvcnRzIG11c3QgbWF0Y2guXG4iOworICAgIH0KIAogICAgIC8v
IEZJWE1FOiBwcm92aWRlIGEgcmVhbCBsaW5lIG51bWJlciBhbmQgc291cmNlIFVSTC4KICAgICBm
cmFtZSgpLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5hZGRNZXNzYWdlKE90aGVyTWVzc2FnZVNv
dXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIDEsIFN0cmluZygpKTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDM2NDk3KQorKysgV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTA2LDggKzI1MDYsMTIgQEAgYm9vbCBG
cmFtZUxvYWRlcjo6c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKAogICAgIGlmIChzZXR0aW5ncyAmJiAh
c2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkgewogICAgICAgICBEb2N1bWVudCog
dGFyZ2V0RG9jdW1lbnQgPSB0YXJnZXRGcmFtZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgLy8gRklY
TUU6IHRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgY29udGFpbiBtb3JlIHNwZWNpZmljcyBvZiB3
aHkgdGhlIG5hdmlnYXRpb24gY2hhbmdlIGlzIG5vdCBhbGxvd2VkLgotICAgICAgICBTdHJpbmcg
bWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJVbnNhZmUgSmF2YVNjcmlwdCBhdHRlbXB0IHRvIGlu
aXRpYXRlIGEgbmF2aWdhdGlvbiBjaGFuZ2UgZm9yIGZyYW1lIHdpdGggVVJMICVzIGZyb20gZnJh
bWUgd2l0aCBVUkwgJXMuXG4iLAotICAgICAgICAgICAgdGFyZ2V0RG9jdW1lbnQtPnVybCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIGFjdGl2ZURvY3VtZW50LT51cmwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKworICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJVbnNhZmUgSmF2YVNjcmlw
dCBhdHRlbXB0IHRvIGluaXRpYXRlIGEgbmF2aWdhdGlvbiBjaGFuZ2UgZm9yIGZyYW1lIHdpdGgg
VVJMICI7CisgICAgICAgIG1lc3NhZ2UgKz0gdGFyZ2V0RG9jdW1lbnQtPnVybCgpLnN0cmluZygp
OworICAgICAgICBtZXNzYWdlICs9ICIgZnJvbSBmcmFtZSB3aXRoIFVSTCAiOworICAgICAgICBt
ZXNzYWdlICs9IGFjdGl2ZURvY3VtZW50LT51cmwoKS5zdHJpbmcoKTsKKyAgICAgICAgbWVzc2Fn
ZSArPSAiLlxuIjsKIAogICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIHByaW50IHRvIHRoZSBj
b25zb2xlIG9mIHRoZSBhY3RpdmVGcmFtZSBhcyB3ZWxsPwogICAgICAgICB0YXJnZXRGcmFtZS0+
ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIEVycm9y
TWVzc2FnZUxldmVsLCBtZXNzYWdlLCAxLCBTdHJpbmcoKSk7CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAko
cmV2aXNpb24gMzY0OTcpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5oIgogI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxl
Y3Rvci5oIgotI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNs
dWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiRE9NU2VsZWN0aW9uLmgiCkBAIC0zODUsOCArMzg0
LDggQEAgdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlVGltZXJGaXJlZChQbwogICAgIGlmICh0
aW1lci0+dGFyZ2V0T3JpZ2luKCkpIHsKICAgICAgICAgLy8gQ2hlY2sgdGFyZ2V0IG9yaWdpbiBu
b3cgc2luY2UgdGhlIHRhcmdldCBkb2N1bWVudCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBz
aW1lciB3YXMgc2NoZWR1bGVkLgogICAgICAgICBpZiAoIXRpbWVyLT50YXJnZXRPcmlnaW4oKS0+
aXNTYW1lU2NoZW1lSG9zdFBvcnQoZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpIHsKLSAg
ICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlVuYWJsZSB0byBwb3N0
IG1lc3NhZ2UgdG8gJXMuIFJlY2lwaWVudCBoYXMgb3JpZ2luICVzLlxuIiwgCi0gICAgICAgICAg
ICAgICAgdGltZXItPnRhcmdldE9yaWdpbigpLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJVbmFibGUgdG8gcG9zdCBtZXNzYWdlIHRvICIg
KyB0aW1lci0+dGFyZ2V0T3JpZ2luKCktPnRvU3RyaW5nKCkgKyAiLiI7CisgICAgICAgICAgICBt
ZXNzYWdlICs9ICIgUmVjaXBpZW50IGhhcyBvcmlnaW4gIiArIGRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCktPnRvU3RyaW5nKCkgKyAiLlxuIjsKICAgICAgICAgICAgIGNvbnNvbGUoKS0+YWRk
TWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlLCAwLCBT
dHJpbmcoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUv
cGFnZS9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM2NDk3KQorKysgV2ViQ29yZS9wYWdl
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgog
Ci0jaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5j
bHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgpAQCAtMjU1Myw3ICsyNTUy
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaQogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmNvdW50KGNvbnN0IFVTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQogewotICAgIFN0cmluZyBpZGVudGlm
aWVyID0gU3RyaW5nKHRpdGxlKSArIFN0cmluZzo6Zm9ybWF0KCJAJXM6JWQiLCBzb3VyY2VJRC51
dGY4KCkuZGF0YSgpLCBsaW5lTnVtYmVyKTsKKyAgICBTdHJpbmcgaWRlbnRpZmllciA9IFN0cmlu
Zyh0aXRsZSkgKyAiQCIgKyBzb3VyY2VJRCArICI6IiArIFN0cmluZzo6bnVtYmVyKGxpbmVOdW1i
ZXIpOwogICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ID0gbV9jb3Vu
dHMuZmluZChpZGVudGlmaWVyKTsKICAgICBpbnQgY291bnQ7CiAgICAgaWYgKGl0ID09IG1fY291
bnRzLmVuZCgpKQpAQCAtMjU2NSw3ICsyNTY0LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
Ojpjb3VudChjb25zdCBVUwogCiAgICAgbV9jb3VudHMuYWRkKGlkZW50aWZpZXIsIGNvdW50KTsK
IAotICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIiVzOiAlZCIsIHRpdGxlLlVU
RjhTdHJpbmcoKS5jX3N0cigpLCBjb3VudCk7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmco
dGl0bGUpICsgIjogIiArIFN0cmluZzo6bnVtYmVyKGNvdW50KTsKICAgICBhZGRNZXNzYWdlVG9D
b25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVt
YmVyLCBzb3VyY2VJRCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCShyZXZp
c2lvbiAzNjQ5NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFs
cCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxNCw2ICsz
MTUsMTEgQEAgY29uc3QgVUNoYXIqIFN0cmluZzo6Y2hhcmFjdGVyc1dpdGhOdWxsVAogCiBTdHJp
bmcgU3RyaW5nOjpmb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CisgICAgLy8gRklY
TUU6IFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIGV2ZW50dWFsbHkgYmUg
cmVtb3ZlZCBmcm9tCisgICAgLy8gdGhlIFN0cmluZyBjbGFzcy4gSXQgcHJvZHVjZXMgaW5jb25z
aXN0ZW50IHJlc3VsdHMgYmV0d2VlbiBwbGF0Zm9ybXMgYW5kCisgICAgLy8gZW5jb3VyYWdlcyBu
ZWVkbGVzcyAob2Z0ZW4gaW5jb3JyZWN0KSBzdHJpbmcgY29udmVyc2lvbnMgaW4gY2FsbGluZwor
ICAgIC8vIGNvZGUuCisKICNpZiBQTEFURk9STShRVCkKICAgICAvLyBVc2UgUVN0cmluZzo6dnNw
cmludGYgdG8gYXZvaWQgdGhlIGxvY2FsZSBkZXBlbmRlbnQgZm9ybWF0dGluZyBvZiB2c25wcmlu
dGYuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4OTk0
CkBAIC0zNjYsMjYgKzM3Miw0MCBAQCBTdHJpbmcgU3RyaW5nOjpmb3JtYXQoY29uc3QgY2hhciAq
Zm9ybWF0CiAKIFN0cmluZyBTdHJpbmc6Om51bWJlcihpbnQgbikKIHsKKyNpZiBVU0UoSlNDKQor
ICAgIHJldHVybiBTdHJpbmcoVVN0cmluZzo6ZnJvbShuKSk7CisjZWxzZQogICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiJWQiLCBuKTsKKyNlbmRpZgogfQogCiBTdHJpbmcgU3RyaW5nOjpudW1i
ZXIodW5zaWduZWQgbikKIHsKKyNpZiBVU0UoSlNDKQorICAgIHJldHVybiBTdHJpbmcoVVN0cmlu
Zzo6ZnJvbShuKSk7CisjZWxzZQogICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXUiLCBuKTsK
KyNlbmRpZgogfQogCiBTdHJpbmcgU3RyaW5nOjpudW1iZXIobG9uZyBuKQogeworI2lmIFVTRShK
U0MpCisgICAgcmV0dXJuIFN0cmluZyhVU3RyaW5nOjpmcm9tKG4pKTsKKyNlbHNlCiAgICAgcmV0
dXJuIFN0cmluZzo6Zm9ybWF0KCIlbGQiLCBuKTsKKyNlbmRpZgogfQogCiBTdHJpbmcgU3RyaW5n
OjpudW1iZXIodW5zaWduZWQgbG9uZyBuKQogeworICAgIC8vIFRPRE86IFVzZSBVU3RyaW5nOjpm
cm9tKCkKICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVsdSIsIG4pOwogfQogCiBTdHJpbmcg
U3RyaW5nOjpudW1iZXIobG9uZyBsb25nIG4pCiB7CisgICAgLy8gVE9ETzogVXNlIFVTdHJpbmc6
OmZyb20oKQogI2lmIFBMQVRGT1JNKFdJTl9PUykKICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQo
IiVJNjRpIiwgbik7CiAjZWxzZQpAQCAtMzk1LDYgKzQxNSw3IEBAIFN0cmluZyBTdHJpbmc6Om51
bWJlcihsb25nIGxvbmcgbikKIAogU3RyaW5nIFN0cmluZzo6bnVtYmVyKHVuc2lnbmVkIGxvbmcg
bG9uZyBuKQogeworICAgIC8vIFRPRE86IFVzZSBVU3RyaW5nOjpmcm9tKCkKICNpZiBQTEFURk9S
TShXSU5fT1MpCiAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlSTY0dSIsIG4pOwogI2Vsc2UK
QEAgLTQwNCw3ICs0MjUsMTEgQEAgU3RyaW5nIFN0cmluZzo6bnVtYmVyKHVuc2lnbmVkIGxvbmcg
bG9uZwogICAgIAogU3RyaW5nIFN0cmluZzo6bnVtYmVyKGRvdWJsZSBuKQogeworI2lmIFVTRShK
U0MpCisgICAgcmV0dXJuIFN0cmluZyhVU3RyaW5nOjpmcm9tKG4pKTsKKyNlbHNlCiAgICAgcmV0
dXJuIFN0cmluZzo6Zm9ybWF0KCIlLjZsZyIsIG4pOworI2VuZGlmCiB9CiAKIGludCBTdHJpbmc6
OnRvSW50U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5TdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5TdHJlYW0uY3BwCShyZXZpc2lvbiAzNjQ5NykKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5T
dHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDkgQEAgdm9pZCBQbHVnaW5T
dHJlYW06OnN0YXJ0U3RyZWFtKCkKICAgICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVy
OwogICAgICAgICBTdHJpbmcgc2VwYXJhdG9yKCI6ICIpOwogCi0gICAgICAgIFN0cmluZyBzdGF0
dXNMaW5lID0gU3RyaW5nOjpmb3JtYXQoIkhUVFAgJWx1IE9LXG4iLCBtX3Jlc291cmNlUmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgICAgIFN0cmluZyBzdGF0dXNMaW5lID0gIkhUVFAg
IjsKKyAgICAgICAgc3RhdHVzTGluZSArPSBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpKTsKKyAgICAgICAgc3Rh
dHVzTGluZSArPSAiIE9LXG4iOwogCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHN0YXR1
c0xpbmUuY2hhcmFjdGVycygpLCBzdGF0dXNMaW5lLmxlbmd0aCgpKTsKIApJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZWRUZW1wbGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkVGVtcGxhdGUuaAkocmV2aXNpb24gMzY0OTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZFRlbXBsYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsMjEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIEZsb2F0UmVjdCBEZWNvcmF0ZWRUeXBl
OwogCiAgICAgICAgIHN0YXRpYyBGbG9hdFJlY3QgbnVsbCgpIHsgcmV0dXJuIEZsb2F0UmVjdCgp
OyB9Ci0gICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgdG9TdHJpbmcoY29uc3QgRmxvYXRSZWN0
JiB0eXBlKSB7IHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJWYgJWYgJWYgJWYiLCB0eXBlLngoKSwg
dHlwZS55KCksIHR5cGUud2lkdGgoKSwgdHlwZS5oZWlnaHQoKSk7IH0KKworICAgICAgICBzdGF0
aWMgQXRvbWljU3RyaW5nIHRvU3RyaW5nKGNvbnN0IEZsb2F0UmVjdCYgdHlwZSkKKyAgICAgICAg
eworICAgICAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAgICAgICAgICB2YWx1ZSArPSBTdHJp
bmc6Om51bWJlcih0eXBlLngoKSk7CisgICAgICAgICAgICB2YWx1ZSArPSAiICI7CisgICAgICAg
ICAgICB2YWx1ZSArPSBTdHJpbmc6Om51bWJlcih0eXBlLnkoKSk7CisgICAgICAgICAgICB2YWx1
ZSArPSAiICI7CisgICAgICAgICAgICB2YWx1ZSArPSBTdHJpbmc6Om51bWJlcih0eXBlLndpZHRo
KCkpOworICAgICAgICAgICAgdmFsdWUgKz0gIiAiOworICAgICAgICAgICAgdmFsdWUgKz0gU3Ry
aW5nOjpudW1iZXIodHlwZS5oZWlnaHQoKSk7CisKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsK
KyAgICAgICAgfQogICAgIH07CiAKICAgICB0ZW1wbGF0ZTw+CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdQYXRoU2VnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZy5oCShyZXZp
c2lvbiAzNjQ5NykKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWcuaAkod29ya2luZyBjb3B5KQpA
QCAtODEsNyArODEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0WShm
bG9hdCB5KSB7IG1feSA9IHk7IH0KICAgICAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1f
eTsgfQogCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
cGF0aFNlZ1R5cGVBc0xldHRlcigpICsgU3RyaW5nOjpmb3JtYXQoIiAlLjZsZyAlLjZsZyIsIG1f
eCwgbV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0
dXJuIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSArICIgIiArIFN0cmluZzo6bnVtYmVyKG1feCkgKyAi
ICIgKyBTdHJpbmc6Om51bWJlcihtX3kpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBmbG9h
dCBtX3g7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQXJjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQXJjLmNwcAkocmV2aXNpb24gMzY0OTcpCisrKyBXZWJD
b3JlL3N2Zy9TVkdQYXRoU2VnQXJjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwOCBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTI0LDYgKzI1LDcgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5j
bHVkZSAiU1ZHUGF0aFNlZ0FyYy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNyw4ICszOSwyOSBAQCBTVkdQYXRoU2VnQXJjUmVsOjpT
VkdQYXRoU2VnQXJjUmVsKGZsb2F0CiB7CiB9CiAKK1N0cmluZyBTVkdQYXRoU2VnQXJjOjp0b1N0
cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciB2YWx1ZTsKKworICAgIHZhbHVlLmFw
cGVuZChwYXRoU2VnVHlwZUFzTGV0dGVyKCkpOworICAgIHZhbHVlLmFwcGVuZCgnICcpOworICAg
IHZhbHVlLmFwcGVuZChTdHJpbmc6Om51bWJlcihtX3IxKSk7CisgICAgdmFsdWUuYXBwZW5kKCcg
Jyk7CisgICAgdmFsdWUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1fcjIpKTsKKyAgICB2YWx1ZS5h
cHBlbmQoJyAnKTsKKyAgICB2YWx1ZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIobV9hbmdsZSkpOwor
ICAgIHZhbHVlLmFwcGVuZCgnICcpOworICAgIHZhbHVlLmFwcGVuZChTdHJpbmc6Om51bWJlcihz
dGF0aWNfY2FzdDxpbnQ+KG1fbGFyZ2VBcmNGbGFnKSkpOworICAgIHZhbHVlLmFwcGVuZCgnICcp
OworICAgIHZhbHVlLmFwcGVuZChTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KG1fc3dl
ZXBGbGFnKSkpOworICAgIHZhbHVlLmFwcGVuZCgnICcpOworICAgIHZhbHVlLmFwcGVuZChTdHJp
bmc6Om51bWJlcihtX3gpKTsKKyAgICB2YWx1ZS5hcHBlbmQoJyAnKTsKKyAgICB2YWx1ZS5hcHBl
bmQoU3RyaW5nOjpudW1iZXIobV95KSk7CisKKyAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsK
IH0KIAotI2VuZGlmIC8vIEVOQUJMRShTVkcpCit9CiAKLS8vIHZpbTp0cz00Om5vZXQKKyNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0FyYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdBcmMuaAkocmV2aXNpb24gMzY0OTcpCisr
KyBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQXJjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTVkdQYXRoU2VnQXJjKGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHIxLCBmbG9hdCByMiwgZmxvYXQgYW5nbGUsIGJvb2wgbGFyZ2VBcmNG
bGFnLCBib29sIHN3ZWVwRmxhZykKICAgICAgICAgOiBtX3goeCksIG1feSh5KSwgbV9yMShyMSks
IG1fcjIocjIpLCBtX2FuZ2xlKGFuZ2xlKSwgbV9sYXJnZUFyY0ZsYWcobGFyZ2VBcmNGbGFnKSwg
bV9zd2VlcEZsYWcoc3dlZXBGbGFnKSB7fQogCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gcGF0aFNlZ1R5cGVBc0xldHRlcigpICsgU3RyaW5nOjpmb3Jt
YXQoIiAlLjZsZyAlLjZsZyAlLjZsZyAlZCAlZCAlLjZsZyAlLjZsZyIsIG1fcjEsIG1fcjIsIG1f
YW5nbGUsIG1fbGFyZ2VBcmNGbGFnLCBtX3N3ZWVwRmxhZywgbV94LCBtX3kpOyB9CisgICAgICAg
IHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBzZXRYKGZs
b2F0IHgpIHsgbV94ID0geDsgfQogICAgICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94
OyB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmNwcAkocmV2aXNpb24g
MzY0OTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICAgIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogCiAgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTI0LDYgKzI1LDcgQEAK
IAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oIgor
I2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
Nyw4ICszOSwyNyBAQCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpTVkdQYXRoU2VnQ3VyCiB7
CiB9CiAKK1N0cmluZyBTVkdQYXRoU2VnQ3VydmV0b0N1YmljOjp0b1N0cmluZygpIGNvbnN0Cit7
CisgICAgU3RyaW5nQnVpbGRlciB2YWx1ZTsKKworICAgIHZhbHVlLmFwcGVuZChwYXRoU2VnVHlw
ZUFzTGV0dGVyKCkpOworICAgIHZhbHVlLmFwcGVuZCgnICcpOworICAgIHZhbHVlLmFwcGVuZChT
dHJpbmc6Om51bWJlcihtX3gxKSk7CisgICAgdmFsdWUuYXBwZW5kKCcgJyk7CisgICAgdmFsdWUu
YXBwZW5kKFN0cmluZzo6bnVtYmVyKG1feTEpKTsKKyAgICB2YWx1ZS5hcHBlbmQoJyAnKTsKKyAg
ICB2YWx1ZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIobV94MikpOworICAgIHZhbHVlLmFwcGVuZCgn
ICcpOworICAgIHZhbHVlLmFwcGVuZChTdHJpbmc6Om51bWJlcihtX3kyKSk7CisgICAgdmFsdWUu
YXBwZW5kKCcgJyk7CisgICAgdmFsdWUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1feCkpOworICAg
IHZhbHVlLmFwcGVuZCgnICcpOworICAgIHZhbHVlLmFwcGVuZChTdHJpbmc6Om51bWJlcihtX3kp
KTsKKworICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOwogfQogCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykKK30KIAotLy8gdmltOnRzPTQ6bm9ldAorI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oCShyZXZpc2lvbiAzNjQ5NykKKysrIFdl
YkNvcmUvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHgxLCBmbG9hdCB5MSwg
ZmxvYXQgeDIsIGZsb2F0IHkyKSA6IFNWR1BhdGhTZWcoKSAsIG1feCh4KSAsIG1feSh5KSAsIG1f
eDEoeDEpICwgbV95MSh5MSkgLCBtX3gyKHgyKSAsIG1feTIoeTIpIHt9CiAKLSAgICAgICAgdmly
dHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBwYXRoU2VnVHlwZUFzTGV0dGVy
KCkgKyBTdHJpbmc6OmZvcm1hdCgiICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxn
IiwgbV94MSwgbV95MSwgbV94MiwgbV95MiwgbV94LCBtX3kpOyB9CisgICAgICAgIHZpcnR1YWwg
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBzZXRYKGZsb2F0IHgpIHsg
bV94ID0geDsgfQogICAgICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmNwcAkocmV2aXNp
b24gMzY0OTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5o
IgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zNiw4ICszNywyMyBAQCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpTVkdQYXRo
CiB7CiB9CiAKK1N0cmluZyBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoOjp0b1N0cmluZygp
IGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciB2YWx1ZTsKKworICAgIHZhbHVlLmFwcGVuZChw
YXRoU2VnVHlwZUFzTGV0dGVyKCkpOworICAgIHZhbHVlLmFwcGVuZCgnICcpOworICAgIHZhbHVl
LmFwcGVuZChTdHJpbmc6Om51bWJlcihtX3gyKSk7CisgICAgdmFsdWUuYXBwZW5kKCcgJyk7Cisg
ICAgdmFsdWUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1feTIpKTsKKyAgICB2YWx1ZS5hcHBlbmQo
JyAnKTsKKyAgICB2YWx1ZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIobV94KSk7CisgICAgdmFsdWUu
YXBwZW5kKCcgJyk7CisgICAgdmFsdWUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1feSkpOworCisg
ICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7CiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQor
fQogCi0vLyB2aW06dHM9NDpub2V0CisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgJKHJldmlzaW9uIDM2NDk3KQor
KysgV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB4MiwgZmxvYXQg
eTIpCiAgICAgICAgIDogU1ZHUGF0aFNlZygpLCBtX3goeCksIG1feSh5KSwgbV94Mih4MiksIG1f
eTIoeSkge30KIAotICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0
dXJuIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSArIFN0cmluZzo6Zm9ybWF0KCIgJS42bGcgJS42bGcg
JS42bGcgJS42bGciLCBtX3gyLCBtX3kyLCBtX3gsIG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBT
dHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAogICAgICAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBt
X3ggPSB4OyB9CiAgICAgICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5jcHAJKHJldmlzaW9uIDM2
NDk3KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUg
IlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDggKzM4LDIzIEBAIFNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljUmVsOjpTVkdQYXRoU2UKIHsKIH0KIAorU3RyaW5nIFNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljOjp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciB2
YWx1ZTsKKworICAgIHZhbHVlLmFwcGVuZChwYXRoU2VnVHlwZUFzTGV0dGVyKCkpOworICAgIHZh
bHVlLmFwcGVuZCgnICcpOworICAgIHZhbHVlLmFwcGVuZChTdHJpbmc6Om51bWJlcihtX3gxKSk7
CisgICAgdmFsdWUuYXBwZW5kKCcgJyk7CisgICAgdmFsdWUuYXBwZW5kKFN0cmluZzo6bnVtYmVy
KG1feTEpKTsKKyAgICB2YWx1ZS5hcHBlbmQoJyAnKTsKKyAgICB2YWx1ZS5hcHBlbmQoU3RyaW5n
OjpudW1iZXIobV94KSk7CisgICAgdmFsdWUuYXBwZW5kKCcgJyk7CisgICAgdmFsdWUuYXBwZW5k
KFN0cmluZzo6bnVtYmVyKG1feSkpOworCisgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7CiB9
CiAKLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorfQogCi0vLyB2aW06dHM9NDpub2V0CisjZW5kaWYg
Ly8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWMuaAkocmV2aXNpb24gMzY0OTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMoZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgeDEsIGZsb2F0IHkxKQogICAgICAgICA6IFNWR1BhdGhTZWcoKSwgbV94KHgpLCBt
X3koeSksIG1feDEoeDEpLCBtX3kxKHkxKSB7fQogCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIHRv
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gcGF0aFNlZ1R5cGVBc0xldHRlcigpICsgU3RyaW5nOjpm
b3JtYXQoIiAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIG1feDEsIG1feTEsIG1feCwgbV95KTsg
fQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogCiAgICAgICAgIHZv
aWQgc2V0WChmbG9hdCB4KSB7IG1feCA9IHg7IH0KICAgICAgICAgZmxvYXQgeCgpIGNvbnN0IHsg
cmV0dXJuIG1feDsgfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRh
bC5oCShyZXZpc2lvbiAzNjQ5NykKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaW5ldG9Ib3Jp
em9udGFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwoZmxv
YXQgeCkgOiBTVkdQYXRoU2VnKCksIG1feCh4KSB7fQogCi0gICAgICAgIHZpcnR1YWwgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gcGF0aFNlZ1R5cGVBc0xldHRlcigpICsgU3RyaW5n
Ojpmb3JtYXQoIiAlLjZsZyIsIG1feCk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdCB7IHJldHVybiBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgKyAiICIgKyBTdHJpbmc6
Om51bWJlcihtX3gpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGZsb2F0IHgpIHsgbV94ID0geDsg
fQogICAgICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaAkocmV2aXNpb24gMzY0OTcpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdQYXRo
U2VnTGluZXRvVmVydGljYWwoZmxvYXQgeSkgOiBTVkdQYXRoU2VnKCksIG1feSh5KSB7fQogCi0g
ICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gcGF0aFNlZ1R5
cGVBc0xldHRlcigpICsgU3RyaW5nOjpmb3JtYXQoIiAlLjZsZyIsIG1feSk7IH0KKyAgICAgICAg
dmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBwYXRoU2VnVHlwZUFzTGV0
dGVyKCkgKyAiICIgKyBTdHJpbmc6Om51bWJlcihtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRZ
KGZsb2F0IHkpIHsgbV95ID0geTsgfQogICAgICAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4g
bV95OyB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5jcHAJKHJldmlzaW9uIDM2NDk3KQorKysgV2ViQ29y
ZS9zdmcvU1ZHUG9pbnRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOSBAQCBT
dHJpbmcgU1ZHUG9pbnRMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkgY29uCiAgICAgICAgIEZsb2F0UG9p
bnQgcG9pbnQgPSBnZXRJdGVtKGksIGVjKTsKICAgICAgICAgQVNTRVJUKGVjID09IDApOwogCi0g
ICAgICAgIHJlc3VsdCArPSBTdHJpbmc6OmZvcm1hdCgiJS42bGcgJS42bGciLCBwb2ludC54KCks
IHBvaW50LnkoKSk7CisgICAgICAgIHJlc3VsdCArPSBTdHJpbmc6Om51bWJlcihwb2ludC54KCkp
OworICAgICAgICByZXN1bHQgKz0gIiAiOworICAgICAgICByZXN1bHQgKz0gU3RyaW5nOjpudW1i
ZXIocG9pbnQueSgpKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
VHJhbnNmb3JtTGlzdC5jcHAJKHJldmlzaW9uIDM2NDk3KQorKysgV2ViQ29yZS9zdmcvU1ZHVHJh
bnNmb3JtTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2lmIEVO
QUJMRShTVkcpCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiU3RyaW5n
QnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1NWR0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oIgpAQCAtODgsNyArODks
MjQgQEAgU3RyaW5nIFNWR1RyYW5zZm9ybUxpc3Q6OnZhbHVlQXNTdHJpbmcoKQogICAgIFNWR1Ry
YW5zZm9ybSB0cmFuc2Zvcm0gPSBjb25jYXRlbmF0ZSgpOwogICAgIGlmICh0cmFuc2Zvcm0udHlw
ZSgpID09IFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVgpIHsKICAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIG1hdHJpeCA9IHRyYW5zZm9ybS5tYXRyaXgoKTsKLSAgICAgICAgcmV0dXJu
IFN0cmluZzo6Zm9ybWF0KCJtYXRyaXgoJWYgJWYgJWYgJWYgJWYgJWYpIiwgbWF0cml4LmEoKSwg
bWF0cml4LmIoKSwgbWF0cml4LmMoKSwgbWF0cml4LmQoKSwgbWF0cml4LmUoKSwgbWF0cml4LmYo
KSk7CisKKyAgICAgICAgU3RyaW5nQnVpbGRlciB2YWx1ZTsKKworICAgICAgICB2YWx1ZS5hcHBl
bmQoIm1hdHJpeCgiKTsKKyAgICAgICAgdmFsdWUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1hdHJp
eC5hKCkpKTsKKyAgICAgICAgdmFsdWUuYXBwZW5kKCcgJyk7CisgICAgICAgIHZhbHVlLmFwcGVu
ZChTdHJpbmc6Om51bWJlcihtYXRyaXguYigpKSk7CisgICAgICAgIHZhbHVlLmFwcGVuZCgnICcp
OworICAgICAgICB2YWx1ZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIobWF0cml4LmMoKSkpOworICAg
ICAgICB2YWx1ZS5hcHBlbmQoJyAnKTsKKyAgICAgICAgdmFsdWUuYXBwZW5kKFN0cmluZzo6bnVt
YmVyKG1hdHJpeC5kKCkpKTsKKyAgICAgICAgdmFsdWUuYXBwZW5kKCcgJyk7CisgICAgICAgIHZh
bHVlLmFwcGVuZChTdHJpbmc6Om51bWJlcihtYXRyaXguZSgpKSk7CisgICAgICAgIHZhbHVlLmFw
cGVuZCgnICcpOworICAgICAgICB2YWx1ZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIobWF0cml4LmYo
KSkpOworICAgICAgICB2YWx1ZS5hcHBlbmQoJyknKTsKKworICAgICAgICByZXR1cm4gdmFsdWUu
dG9TdHJpbmcoKTsKICAgICB9CiAKICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdVc2VF
bGVtZW50LmNwcAkocmV2aXNpb24gMzY0OTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDkgKzIwNCwxNiBAQCB2b2lkIGR1bXBJbnN0YW5j
ZVRyZWUodW5zaWduZWQgaW50JiBkZXB0CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBkZXB0aDsgKytpKQogICAgICAgICB0ZXh0ICs9ICIgICI7CiAKLSAgICB0ZXh0ICs9IFN0cmlu
Zzo6Zm9ybWF0KCJTVkdFbGVtZW50SW5zdGFuY2UgKHBhcmVudE5vZGU9JXMsIGZpcnN0Q2hpbGQ9
JXMsIGNvcnJlc3BvbmRpbmdFbGVtZW50PSVzLCBpZD0lcylcbiIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJlbnROb2RlTmFtZS5sYXRpbjEoKS5kYXRhKCksIGZpcnN0Q2hpbGROb2Rl
TmFtZS5sYXRpbjEoKS5kYXRhKCksIGVsZW1lbnROb2RlTmFtZS5sYXRpbjEoKS5kYXRhKCksIGVs
ZW1lbnRJZC5sYXRpbjEoKS5kYXRhKCkpOwotIAorICAgIHRleHQgKz0gIlNWR0VsZW1lbnRJbnN0
YW5jZSAocGFyZW50Tm9kZT0iOworICAgIHRleHQgKz0gcGFyZW50Tm9kZU5hbWU7CisgICAgdGV4
dCArPSAiLCBmaXJzdENoaWxkPSI7CisgICAgdGV4dCArPSBmaXJzdENoaWxkTm9kZU5hbWU7Cisg
ICAgdGV4dCArPSAiLCBjb3JyZXNwb25kaW5nRWxlbWVudD0iOworICAgIHRleHQgKz0gZWxlbWVu
dE5vZGVOYW1lOworICAgIHRleHQgKz0gIiwgaWQ9IjsKKyAgICB0ZXh0ICs9IGVsZW1lbnRJZDsK
KyAgICB0ZXh0ICs9ICIpIjsKKwogICAgIGRlcHRoKys7CiAKICAgICBmb3IgKFNWR0VsZW1lbnRJ
bnN0YW5jZSogaW5zdGFuY2UgPSB0YXJnZXRJbnN0YW5jZS0+Zmlyc3RDaGlsZCgpOyBpbnN0YW5j
ZTsgaW5zdGFuY2UgPSBpbnN0YW5jZS0+bmV4dFNpYmxpbmcoKSkKQEAgLTMxNSw3ICszMjIsMTEg
QEAgdm9pZCBTVkdVc2VFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZQogICAgIC8vIChpLmUu
LCByaWdodC1zaWRlKSBvZiB0aGUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBvbiB0aGUgZ2VuZXJhdGVk
ICdnJywgd2hlcmUgeAogICAgIC8vIGFuZCB5IHJlcHJlc2VudCB0aGUgdmFsdWVzIG9mIHRoZSB4
IGFuZCB5IGF0dHJpYnV0ZXMgb24gdGhlICd1c2UnIGVsZW1lbnQuIAogICAgIGlmICh4KCkudmFs
dWUodGhpcykgIT0gMC4wIHx8IHkoKS52YWx1ZSh0aGlzKSAhPSAwLjApIHsKLSAgICAgICAgU3Ry
aW5nIHRyYW5zZm9ybVN0cmluZyA9IFN0cmluZzo6Zm9ybWF0KCJ0cmFuc2xhdGUoJWYsICVmKSIs
IHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMpKTsKKyAgICAgICAgU3RyaW5nIHRyYW5z
Zm9ybVN0cmluZyA9ICJ0cmFuc2xhdGUoIjsKKyAgICAgICAgdHJhbnNmb3JtU3RyaW5nICs9IFN0
cmluZzo6bnVtYmVyKHgoKS52YWx1ZSh0aGlzKSk7CisgICAgICAgIHRyYW5zZm9ybVN0cmluZyAr
PSAiLCAiOworICAgICAgICB0cmFuc2Zvcm1TdHJpbmcgKz0gU3RyaW5nOjpudW1iZXIoeSgpLnZh
bHVlKHRoaXMpKTsKKyAgICAgICAgdHJhbnNmb3JtU3RyaW5nICs9ICIpIjsKICAgICAgICAgbV9z
aGFkb3dUcmVlUm9vdEVsZW1lbnQtPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6dHJhbnNmb3JtQXR0
ciwgdHJhbnNmb3JtU3RyaW5nKTsKICAgICB9CiAKQEAgLTU4NCwxNCArNTk1LDE4IEBAIHZvaWQg
U1ZHVXNlRWxlbWVudDo6ZXhwYW5kVXNlRWxlbWVudHNJblMKICAgICAgICAgICAgIC8vIChpLmUu
LCByaWdodC1zaWRlKSBvZiB0aGUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBvbiB0aGUgZ2VuZXJhdGVk
ICdnJywgd2hlcmUgeAogICAgICAgICAgICAgLy8gYW5kIHkgcmVwcmVzZW50IHRoZSB2YWx1ZXMg
b2YgdGhlIHggYW5kIHkgYXR0cmlidXRlcyBvbiB0aGUgJ3VzZScgZWxlbWVudC4KICAgICAgICAg
ICAgIGlmICh1c2UtPngoKS52YWx1ZSh0aGlzKSAhPSAwLjAgfHwgdXNlLT55KCkudmFsdWUodGhp
cykgIT0gMC4wKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjbG9uZVBhcmVudC0+aGFzQXR0cmli
dXRlKFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJp
bmcgdHJhbnNmb3JtU3RyaW5nID0gU3RyaW5nOjpmb3JtYXQoInRyYW5zbGF0ZSglZiwgJWYpIiwg
dXNlLT54KCkudmFsdWUodGhpcyksIHVzZS0+eSgpLnZhbHVlKHRoaXMpKTsKLSAgICAgICAgICAg
ICAgICAgICAgY2xvbmVQYXJlbnQtPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6dHJhbnNmb3JtQXR0
ciwgdHJhbnNmb3JtU3RyaW5nKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcgdHJhbnNmb3JtU3RyaW5nID0gU3RyaW5nOjpmb3JtYXQoIiB0cmFu
c2xhdGUoJWYsICVmKSIsIHVzZS0+eCgpLnZhbHVlKHRoaXMpLCB1c2UtPnkoKS52YWx1ZSh0aGlz
KSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHRyYW5zZm9ybVN0cmluZzsKKyAgICAgICAgICAg
ICAgICBpZiAoY2xvbmVQYXJlbnQtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dHJhbnNmb3JtQXR0
cikpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0cmFuc2Zvcm1B
dHRyaWJ1dGUgPSBjbG9uZVBhcmVudC0+Z2V0QXR0cmlidXRlKFNWR05hbWVzOjp0cmFuc2Zvcm1B
dHRyKTsKLSAgICAgICAgICAgICAgICAgICAgY2xvbmVQYXJlbnQtPnNldEF0dHJpYnV0ZShTVkdO
YW1lczo6dHJhbnNmb3JtQXR0ciwgdHJhbnNmb3JtQXR0cmlidXRlICsgdHJhbnNmb3JtU3RyaW5n
KTsgCisgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmluZyArPSB0cmFuc2Zvcm1BdHRy
aWJ1dGU7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmluZyArPSAiICI7CiAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmluZyArPSAidHJhbnNs
YXRlKCI7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyaW5nICs9IFN0cmluZzo6bnVtYmVy
KHVzZS0+eCgpLnZhbHVlKHRoaXMpKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJpbmcg
Kz0gIiwgIjsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJpbmcgKz0gU3RyaW5nOjpudW1i
ZXIodXNlLT55KCkudmFsdWUodGhpcykpOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmlu
ZyArPSAiKSI7CisgICAgICAgICAgICAgICAgY2xvbmVQYXJlbnQtPnNldEF0dHJpYnV0ZShTVkdO
YW1lczo6dHJhbnNmb3JtQXR0ciwgdHJhbnNmb3JtU3RyaW5nKTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cg==
</data>
<flag name="review"
          id="22458"
          type_id="1"
          status="-"
          setter="evan"
    />
          </attachment>
      

    </bug>

</bugzilla>