<?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>69782</bug_id>
          
          <creation_ts>2011-10-10 13:54:35 -0700</creation_ts>
          <short_desc>DFG JSVALUE64 spill/fill code should not box integers and doubles</short_desc>
          <delta_ts>2011-10-10 18:13:46 -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>JavaScriptCore</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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>481131</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-10 13:54:35 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481150</commentid>
    <comment_count>1</comment_count>
      <attachid>110403</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-10 14:14:30 -0700</bug_when>
    <thetext>Created attachment 110403
the patch

Slight speed-up.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;LessBoxing&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc

Collected 60 samples per benchmark/VM, with 20 VM invocations per benchmark. Used 1 benchmark iteration per VM
invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting
benchmark execution times with 95% confidence intervals in milliseconds.

                                            TipOfTree               LessBoxing                                   
SunSpider:
   3d-cube                                7.2739+-0.0657    ?     7.3075+-0.0697       ?
   3d-morph                               7.4757+-0.0544    !     7.7074+-0.0955       ! definitely 1.0310x slower
   3d-raytrace                            7.4721+-0.0686          7.3894+-0.0769         might be 1.0112x faster
   access-binary-trees                    1.7216+-0.0261    ?     1.7246+-0.0247       ?
   access-fannkuch                        6.3454+-0.0520    ?     6.3688+-0.0442       ?
   access-nbody                           3.4795+-0.0347    ^     3.3183+-0.0330       ^ definitely 1.0486x faster
   access-nsieve                          2.5647+-0.0319    ?     2.5800+-0.0279       ?
   bitops-3bit-bits-in-byte               1.7392+-0.0274          1.7390+-0.0149       
   bitops-bits-in-byte                    2.7640+-0.0345          2.7462+-0.0280       
   bitops-bitwise-and                     3.3015+-0.0464    ?     3.3296+-0.0412       ?
   bitops-nsieve-bits                     5.4197+-0.0474          5.4170+-0.0506       
   controlflow-recursive                  2.0556+-0.0201    ?     2.0809+-0.0162       ? might be 1.0123x slower
   crypto-aes                             6.6586+-0.0740          6.5857+-0.0735         might be 1.0111x faster
   crypto-md5                             2.8172+-0.0343          2.7567+-0.0303         might be 1.0219x faster
   crypto-sha1                            2.4703+-0.0316    ?     2.4833+-0.0288       ?
   date-format-tofte                     10.1067+-0.0994         10.0543+-0.1002       
   date-format-xparb                      9.5907+-0.1864    ^     9.1953+-0.0958       ^ definitely 1.0430x faster
   math-cordic                            6.3579+-0.0477    ?     6.3929+-0.0468       ?
   math-partial-sums                      7.5736+-0.0520          7.5168+-0.0542       
   math-spectral-norm                     2.8186+-0.0290    ?     2.8347+-0.0307       ?
   regexp-dna                            10.6892+-0.0767         10.6194+-0.0516       
   string-base64                          5.1842+-0.0529    ?     5.2541+-0.0597       ? might be 1.0135x slower
   string-fasta                           6.3671+-0.0567    ?     6.3885+-0.0457       ?
   string-tagcloud                       11.0805+-0.1035    ?    11.1701+-0.0959       ?
   string-unpack-code                    20.1535+-0.1703    ?    20.2916+-0.1425       ?
   string-validate-input                  6.3769+-0.0697          6.3233+-0.0749       

   &lt;arithmetic&gt; *                         6.1484+-0.0141          6.1375+-0.0108       
   &lt;geometric&gt;                            5.0664+-0.0129          5.0568+-0.0098       
   &lt;harmonic&gt;                             4.1667+-0.0175          4.1619+-0.0121       

                                            TipOfTree               LessBoxing                                   
V8:
   crypto                                72.0284+-0.1599    ?    72.0857+-0.2500       ?
   deltablue                            225.0126+-0.7738    ?   225.8579+-0.9640       ?
   earley-boyer                          90.3212+-0.1424    !    90.9863+-0.1762       ! definitely 1.0074x slower
   raytrace                              58.2994+-0.1702         58.1696+-0.1722       
   regexp                               104.0321+-0.1473    ^   103.2559+-0.1733       ^ definitely 1.0075x faster
   richards                             206.0128+-0.4354        205.8134+-0.5239       
   splay                                 94.6477+-0.3675    ?    94.9802+-0.2992       ?

   &lt;arithmetic&gt;                         121.4792+-0.1492    ?   121.5927+-0.1876       ?
   &lt;geometric&gt; *                        108.1507+-0.1170    ?   108.2223+-0.1366       ?
   &lt;harmonic&gt;                            97.7793+-0.1159    ?    97.8191+-0.1266       ?

                                            TipOfTree               LessBoxing                                   
Kraken:
   ai-astar                             496.6051+-1.8897        496.3196+-1.6396       
   audio-beat-detection                 191.7711+-0.3888    ^   189.2745+-0.3614       ^ definitely 1.0132x faster
   audio-dft                            267.0710+-1.1490        266.8231+-1.7366       
   audio-fft                            125.0587+-0.2357    ^   123.5293+-0.4490       ^ definitely 1.0124x faster
   audio-oscillator                     253.1486+-0.8283    ^   251.0860+-0.7502       ^ definitely 1.0082x faster
   imaging-darkroom                     413.1779+-0.8445    !   414.9194+-0.8582       ! definitely 1.0042x slower
   imaging-desaturate                   231.2899+-1.0118        230.5569+-0.4188       
   imaging-gaussian-blur                580.9515+-0.8881    ^   577.4326+-0.9453       ^ definitely 1.0061x faster
   json-parse-financial                  54.5454+-0.1643         54.2829+-0.1455       
   json-stringify-tinderbox              67.6192+-0.3464    !    68.2558+-0.1267       ! definitely 1.0094x slower
   stanford-crypto-aes                  130.6782+-0.6582    ?   130.8398+-0.7034       ?
   stanford-crypto-ccm                  100.8848+-0.2843    !   101.4564+-0.2398       ! definitely 1.0057x slower
   stanford-crypto-pbkdf2               192.1694+-0.4210    ^   189.3855+-0.5868       ^ definitely 1.0147x faster
   stanford-crypto-sha256-iterative      71.0562+-0.1780         70.8363+-0.1519       

   &lt;arithmetic&gt; *                       226.8591+-0.2401    ^   226.0713+-0.2433       ^ definitely 1.0035x faster
   &lt;geometric&gt;                          177.0123+-0.1984    ^   176.4272+-0.1804       ^ definitely 1.0033x faster
   &lt;harmonic&gt;                           138.1171+-0.1798        137.8161+-0.1446       

                                            TipOfTree               LessBoxing                                   
All benchmarks:
   &lt;arithmetic&gt;                          89.0689+-0.0804    ^    88.8452+-0.0843       ^ definitely 1.0025x faster
   &lt;geometric&gt;                           23.0348+-0.0365         22.9904+-0.0289       
   &lt;harmonic&gt;                             7.3289+-0.0301          7.3205+-0.0208       

                                            TipOfTree               LessBoxing                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.2325+-0.0482         53.1514+-0.0470</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481155</commentid>
    <comment_count>2</comment_count>
      <attachid>110403</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-10-10 14:19:11 -0700</bug_when>
    <thetext>Comment on attachment 110403
the patch

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

Does 32_64 still just end up boxing?

&gt; Source/JavaScriptCore/ChangeLog:7
&gt; +

Need moar changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481158</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-10 14:21:32 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 110403 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110403&amp;action=review
&gt; 
&gt; Does 32_64 still just end up boxing?

It ends up .... doing things.  The reason why I didn&apos;t touch that code is that Xian is hacking it.  Apparently it&apos;s still got wrongness.  I figure we want to get it to be correct first and then add the corner cases later.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:7
&gt; &gt; +
&gt; 
&gt; Need moar changelog

Ack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481211</commentid>
    <comment_count>4</comment_count>
      <attachid>110414</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-10 15:15:46 -0700</bug_when>
    <thetext>Created attachment 110414
the patch

more stuff in changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481369</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-10 18:13:46 -0700</bug_when>
    <thetext>Landed in r97118.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110403</attachid>
            <date>2011-10-10 14:14:30 -0700</date>
            <delta_ts>2011-10-10 15:15:46 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>noboxspill_patch_1.diff</filename>
            <type>text/plain</type>
            <size>22230</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAK
KzIwMTEtMTAtMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSlNWQUxVRTY0IHNwaWxsL2ZpbGwgY29kZSBzaG91bGQgbm90IGJveCBpbnRlZ2VycyBhbmQg
ZG91YmxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Njk3ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25J
bmZvOjpzcGlsbCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRGaWxsRlBSKToKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzcGlsbCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3I2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZp
bGxEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1Zh
bHVlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdp
c3RlckZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OnZpcnR1YWxSZWdp
c3Rlcik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisK
IDIwMTEtMTAtMTAgIFl1cWlhbmcgWGlhbiAgPHl1cWlhbmcueGlhbkBpbnRlbC5jb20+CiAKICAg
ICAgICAgSlNWQUxVRTMyXzY0IERGRyBKSVQgLSBidWcgZml4IGZvciBWOCBiZW5jaG1hcmsgY2Fz
ZXMgImNyeXB0byIgYW5kICJyYXl0cmFjZSIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJldmlzaW9uIDk3MDc5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjcsNyArMzY3LDcgQEAgcHVibGljOgogICAgICAgICAvLyBwb2ludGVycy4gVGhpcyBpcyBub3Qg
dHJ1ZSBhbnltb3JlLCBidXQgd2Ugc3RpbGwgYXNzdW1lLCBpbiB0aGUgZmlsbCBjb2RlLAogICAg
ICAgICAvLyB0aGF0IGFueSBzcGlsbCBzbG90IGZvciBhIEpTIHZhbHVlIGlzIGJveGVkLiBGb3Ig
c3RvcmFnZSBwb2ludGVycywgdGhlcmUgaXMKICAgICAgICAgLy8gbm90aGluZyB3ZSBjYW4gZG8g
dG8gYm94IHRoZW0sIHNvIHdlIGFsbG93IHRoYXQgdG8gYmUgYW4gZXhjZXB0aW9uLgotICAgICAg
ICBBU1NFUlQoKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBE
YXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgIEFTU0VSVCgoc3BpbGxGb3JtYXQgJiBEYXRhRm9y
bWF0SlMpIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlIHx8IHNwaWxsRm9ybWF0
ID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUp
OwogCiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAg
bV9zcGlsbEZvcm1hdCA9IHNwaWxsRm9ybWF0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAkocmV2aXNpb24gOTcwNzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDExIEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9y
OjpmaWxsSW50ZWdlcihOb2QKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1
ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0SW50ZWdlcikgeworICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAg
ICAvLyBUYWcgaXQsIHNpbmNlIGZpbGxJbnRlZ2VyKCkgaXMgdXNlZCB3aGVuIHdlIHdhbnQgYSBi
b3hlZCBpbnRlZ2VyLgorICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJU
KGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlMgfHwgaW5mby5zcGlsbEZvcm1hdCgp
ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIs
IHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwpAQCAtMTE2LDkgKzEyMSw5IEBA
IEZQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGUKICAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIGlm
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgR1BS
UmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0KICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkg
eworICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CisgICAgICAgIAogICAgICAg
ICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwogICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRl
eCkpLCBncHIpOwpAQCAtMTQ1LDExICsxNTAsMzUgQEAgRlBSUmVnIEpJVENvZGVHZW5lcmF0b3I6
OmZpbGxEb3VibGUoTm9kZQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAg
ICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0g
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxS
ZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgc3BpbGxG
b3JtYXQpOwotICAgICAgICAgICAgdW5sb2NrKGdwcik7CisgICAgICAgICAgICBzd2l0Y2ggKHNw
aWxsRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsKKyAgICAg
ICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGZwcik7CisgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlckRvdWJsZSk7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZw
cik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsKKyAgICAgICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
U3BpbGxlZCk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxs
SW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIHVubG9jayhncHIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOworICAgICAgICAKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAg
IG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShn
cHIsIHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMjYz
LDkgKzI5MiwyMCBAQCBHUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUoTm9kCiAg
ICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
Q29uc3RhbnQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGls
bEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChzcGlsbEZv
cm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAg
ICAgICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgc3BpbGxGb3JtYXQgPSBEYXRh
Rm9ybWF0SlNJbnRlZ2VyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdw
cik7CisgICAgICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBib3ggdGhlIGRvdWJsZSwgc2luY2Ug
d2Ugd2FudCBhIEpTVmFsdWUuCisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAgIHNw
aWxsRm9ybWF0ID0gRGF0YUZvcm1hdEpTRG91YmxlOworICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIHNwaWxsRm9y
bWF0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZ3ByOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk3MDc5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4Myw4ICszODMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgICAgIC8vIGl0IHdhcyBhbHJlYWR5IHNw
aWxsZWQgcHJldmlvdXNseSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB1bmJveGluZy4KKyAgICAgICAg
aWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBpbmZvLnNwaWxsRm9y
bWF0KCkgIT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICAgICAgLy8gaXQgd2FzIGFscmVh
ZHkgc3BpbGxlZCBwcmV2aW91c2x5IGFuZCBub3QgYXMgYSBkb3VibGUsIHdoaWNoIG1lYW5zIHdl
IG5lZWQgdW5ib3hpbmcuCiAgICAgICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Ioc3BpbGxNZSksIGNhblRyYW1wbGUpOwogICAgICAgICAgICAgdW5ib3hEb3VibGUo
Y2FuVHJhbXBsZSwgaW5mby5mcHIoKSk7CkBAIC01MDYsMTcgKzUwNiwyMCBAQCBwcm90ZWN0ZWQ6
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsK
LSAgICAgICAgICAgIC8vIEFsbCB2YWx1ZXMgYXJlIHNwaWxsZWQgYXMgSlNWYWx1ZXMsIHNvIGJv
eCB0aGUgZG91YmxlIHZpYSBhIHRlbXBvcmFyeSBncHIuCi0gICAgICAgICAgICBHUFJSZWcgZ3By
ID0gYm94RG91YmxlKGluZm8uZnByKCkpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoZ3By
LCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICB1bmxvY2so
Z3ByKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICAg
ICAgICAgIG1faml0LnN0b3JlRG91YmxlKGluZm8uZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHNwaWxsTWUpKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdERvdWJsZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIERhdGFGb3JtYXRJbnRlZ2VyOiB7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGluZm8u
Z3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKKyAgICAgICAgICAgIGlu
Zm8uc3BpbGwoRGF0YUZvcm1hdEludGVnZXIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29k
ZSBoYW5kbGVzIEpTVmFsdWVzLCBpbnQzMnMsIGFuZCBjZWxscy4KLSAgICAgICAgICAgIEFTU0VS
VChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlciB8fCBzcGlsbEZvcm1hdCA9PSBEYXRh
Rm9ybWF0Q2VsbCB8fCBzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBB
U1NFUlQoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwgc3BpbGxGb3JtYXQgJiBEYXRh
Rm9ybWF0SlMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJSZWcgcmVnID0gaW5mby5n
cHIoKTsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYm94IGludDMyIGFuZCBjZWxsIHZhbHVl
cyAuLi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NzA3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDggQEAgdm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CiAgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsK
ICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIElu
dDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2Vk
SW5SZWdpc3RlckZpbGU6CiAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAg
ICAgICAgICAgICBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMrKzsKICAgICAgICAg
ICAgIEFTU0VSVCgoaW50KXJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpID49IDApOwpAQCAtMjQ5
LDE3ICsyNTEsNDMgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgog
ICAgICAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5kZXggPSAwOwogICAgICAgICAgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsr
aW5kZXgpIHsKICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9
IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5
LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudElu
ZGV4KyspKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CisgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAg
ICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rlcigp
KSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAg
R1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7Cisg
ICAgICAgICAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2Ug
RG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAgR1BS
UmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7CisgICAg
ICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0
ZXIoKSksIGdwcik7CisgICAgICAgICAgICAgICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKICAg
ICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zl
cmllcygpOyArK2luZGV4KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAgICAgICAgIGlm
IChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5m
bzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIHN3
aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIERpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lz
dGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhp
dC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHRoZSBz
aHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNlCkBAIC0yODEsMTkgKzMwOSw0NiBAQCB2b2lk
IEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgICAgIAogICAgICAgICAg
ICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7
ICsraW5kZXgpIHsKICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlY292
ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVj
b3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAg
ICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgr
Kyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50
ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGU6CisgICAgICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rv
cmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAg
ICAgICAgICAgbG9hZDMyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAgICBz
dG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0
ZXJGaWxlOiB7CisgICAgICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVy
eS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1
ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQ
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7CiAgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewogICAgICAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFk
ZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICBj
YXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgY2FzZSBE
b3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICAgICAgbG9hZFB0
cihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51
bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFs
UmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gOTcwNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3
ICs0NCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKIAogICAg
IHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9u
ZTogewotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQo
bm9kZUluZGV4KSkgeworICAgICAgICBpZiAoKG5vZGUuaGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQz
MkNvbnN0YW50KG5vZGVJbmRleCkpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
RG91YmxlKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigpOwog
ICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAg
ICByZXR1cm4gYWxsb2NhdGUoKTsKQEAgLTYyLDExICs2MiwxMiBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIERh
dGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7Ci0gICAgICAgIEFTU0VS
VChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
KHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0
SW50ZWdlcik7CiAgICAgICAgIAogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIAotICAgICAgICBpZiAoc3BpbGxG
b3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcikgeworICAgICAgICBpZiAoc3BpbGxGb3JtYXQg
PT0gRGF0YUZvcm1hdEpTSW50ZWdlciB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdl
cikgewogICAgICAgICAgICAgLy8gSWYgd2Uga25vdyB0aGlzIHdhcyBzcGlsbGVkIGFzIGFuIGlu
dGVnZXIgd2UgY2FuIGZpbGwgd2l0aG91dCBjaGVja2luZy4KICAgICAgICAgICAgIGlmIChzdHJp
Y3QpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKQEAgLTc0LDcgKzc1LDExIEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgICAgICAgICByZXR1cm5Gb3Jt
YXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0
ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAg
ICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICAgICAgaW5m
by5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAgICAgcmV0
dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEpTSW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBncHI7
CkBAIC0xNzUsOSArMTgwLDkgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
RG91YgogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
Tm9uZSkgewotICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLQogICAgICAgICBpZiAo
bm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUo
KTsKKwogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CiAgICAg
ICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIoc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlSW5kZXgpKSkpKSwgZ3ByKTsKQEAgLTIwMywxMSArMjA4LDM1IEBAIEZQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsK
LSAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgbV9n
cHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIGdwcik7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBzcGlsbEZvcm1hdCk7Ci0g
ICAgICAgIHVubG9jayhncHIpOworICAgICAgICBzd2l0Y2ggKHNwaWxsRm9ybWF0KSB7CisgICAg
ICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogeworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZw
ckFsbG9jYXRlKCk7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7CisgICAgICAgICAgICBtX2ZwcnMucmV0
YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKKyAgICAgICAgICAg
IGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICAgICAgcmV0dXJuIGZwcjsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsKKyAgICAg
ICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7
CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVh
bFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAg
ICAgICAgICAgIHVubG9jayhncHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CisK
KyAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxl
ZCk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwg
c3BpbGxGb3JtYXQpOworICAgICAgICAgICAgdW5sb2NrKGdwcik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgp
KSB7CkBAIC0zMDAsNiArMzI5LDExIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUNlbGwKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2Fz
ZSBEYXRhRm9ybWF0Tm9uZTogeworICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERh
dGFGb3JtYXRJbnRlZ2VyIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91Ymxl
KSB7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigpOworICAgICAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEdQ
UlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCiAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkp
IHsKQEAgLTM2OCw2ICs0MDIsMTEgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQm9vbAogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNl
IERhdGFGb3JtYXROb25lOiB7CisgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdEludGVnZXIgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
IHsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CisgICAgICAg
ICAgICByZXR1cm4gYWxsb2NhdGUoKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgR1BS
UmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDk3MDc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNiw3ICs1MTYsNyBAQCBWYWx1
ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsCiAgICAgICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeTo6aW5HUFIoaW5mb1B0ci0+Z3ByKCksIGluZm9QdHItPnJlZ2lzdGVyRm9y
bWF0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgpICE9
IERhdGFGb3JtYXROb25lKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZVB0ci0+
dmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpk
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGVQ
dHItPnZpcnR1YWxSZWdpc3RlcigpKSwgaW5mb1B0ci0+c3BpbGxGb3JtYXQoKSk7CiAgICAgCiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkocmV2aXNpb24gOTcwNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsOSBAQCBlbnVtIFZh
bHVlUmVjb3ZlcnlUZWNobmlxdWUgewogICAgIEluRlBSLAogICAgIC8vIEl0J3MgaW4gdGhlIHJl
Z2lzdGVyIGZpbGUsIGJ1dCBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbi4KICAgICBEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGluIHRoZSByZWdpc3RlciBmaWxlLCBhdCBhIGRp
ZmZlcmVudCBsb2NhdGlvbiwgYW5kIGl0J3MgdW5ib3hlZC4KKyAgICBJbnQzMkRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlLAorICAgIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAogICAgIC8v
IEl0J3MgYSBjb25zdGFudC4KICAgICBDb25zdGFudCwKICAgICAvLyBEb24ndCBrbm93IGhvdyB0
byByZWNvdmVyIGl0LgpAQCAtMjI2LDEwICsyMjksMjMgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBkaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZShWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZykKKyAgICBzdGF0aWMg
VmFsdWVSZWNvdmVyeSBkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZywgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQogICAgIHsKICAgICAgICAgVmFsdWVSZWNv
dmVyeSByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlOworICAgICAgICBzd2l0Y2ggKGRhdGFGb3JtYXQpIHsKKyAgICAgICAgY2FzZSBE
YXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEludDMy
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgICAgICAgICByZXN1bHQubV90
ZWNobmlxdWUgPSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCAh
PSBEYXRhRm9ybWF0Tm9uZSAmJiBkYXRhRm9ybWF0ICE9IERhdGFGb3JtYXRTdG9yYWdlKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmVzdWx0Lm1fc291cmNlLnZp
cnR1YWxSZWcgPSB2aXJ0dWFsUmVnOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAg
LTI3Miw3ICsyODgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlcigpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0g
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpOworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0g
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGUgfHwgbV90ZWNobmlxdWUgPT0gSW50MzJEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZSB8fCBtX3RlY2huaXF1ZSA9PSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVy
RmlsZSk7CiAgICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0dWFsUmVnOwogICAgIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110414</attachid>
            <date>2011-10-10 15:15:46 -0700</date>
            <delta_ts>2011-10-10 15:51:15 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>noboxspill_patch_2.diff</filename>
            <type>text/plain</type>
            <size>22746</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAK
KzIwMTEtMTAtMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSlNWQUxVRTY0IHNwaWxsL2ZpbGwgY29kZSBzaG91bGQgbm90IGJveCBpbnRlZ2VycyBhbmQg
ZG91YmxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Njk3ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIEFkZGVkIHRoZSBub3Rpb24gb2YgRGF0YUZvcm1hdEludGVnZXIgYW5kIERhdGFGb3Jt
YXREb3VibGUgdG8gdGhlIHNwaWxsRm9ybWF0LgorICAgICAgICBUaGlzIHJlcXVpcmVkIGNoYW5n
aW5nIGFsbCBvZiB0aGUgcGxhY2VzIHRoYXQgc3BpbGwgcmVnaXN0ZXJzIChib3RoIHNpbGVudGx5
CisgICAgICAgIGFuZCBub3QpIGFuZCBmaWxsaW5nIHJlZ2lzdGVycyAoYm90aCBzaWxlbnRseSBh
bmQgb24gZGVtYW5kKS4gSXQgYWxzbyByZXF1aXJlZAorICAgICAgICBjaGFuZ2luZyBPU1IgZXhp
dCB0byByZWNvZ25pemUgdGhhdCBhIHNwaWxsZWQgdmFsdWUgKERpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlKQorICAgICAgICBtYXkgaGF2ZSB0aGUgd3JvbmcgZm9ybWF0IGZvciB0aGUgb2xkIEpJVCAo
dW5ib3hlZCBpbnQgb3IgZG91YmxlKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBzbGln
aHQgd2luIG9uIEtyYWtlbiAoMC4yNSUpIGFuZCBuZXV0cmFsIGVsc2V3aGVyZS4KKworICAgICAg
ICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRp
b25JbmZvOjpzcGlsbCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRGaWxsRlBSKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzcGlsbCk6CisgICAgICAgICogZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3I2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmZpbGxEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxK
U1ZhbHVlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5S
ZWdpc3RlckZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OnZpcnR1YWxS
ZWdpc3Rlcik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6
CisKIDIwMTEtMTAtMTAgIFl1cWlhbmcgWGlhbiAgPHl1cWlhbmcueGlhbkBpbnRlbC5jb20+CiAK
ICAgICAgICAgSlNWQUxVRTMyXzY0IERGRyBKSVQgLSBidWcgZml4IGZvciBWOCBiZW5jaG1hcmsg
Y2FzZXMgImNyeXB0byIgYW5kICJyYXl0cmFjZSIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJldmlzaW9uIDk3MDc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjcsNyArMzY3LDcgQEAgcHVibGljOgogICAgICAgICAvLyBwb2ludGVycy4gVGhpcyBpcyBu
b3QgdHJ1ZSBhbnltb3JlLCBidXQgd2Ugc3RpbGwgYXNzdW1lLCBpbiB0aGUgZmlsbCBjb2RlLAog
ICAgICAgICAvLyB0aGF0IGFueSBzcGlsbCBzbG90IGZvciBhIEpTIHZhbHVlIGlzIGJveGVkLiBG
b3Igc3RvcmFnZSBwb2ludGVycywgdGhlcmUgaXMKICAgICAgICAgLy8gbm90aGluZyB3ZSBjYW4g
ZG8gdG8gYm94IHRoZW0sIHNvIHdlIGFsbG93IHRoYXQgdG8gYmUgYW4gZXhjZXB0aW9uLgotICAg
ICAgICBBU1NFUlQoKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9
PSBEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgIEFTU0VSVCgoc3BpbGxGb3JtYXQgJiBEYXRh
Rm9ybWF0SlMpIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlIHx8IHNwaWxsRm9y
bWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXREb3Vi
bGUpOwogCiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAg
ICAgbV9zcGlsbEZvcm1hdCA9IHNwaWxsRm9ybWF0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAkocmV2aXNpb24gOTcw
NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDExIEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJh
dG9yOjpmaWxsSW50ZWdlcihOb2QKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2
YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwog
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0SW50ZWdlcikgeworICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOworICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAg
ICAgICAvLyBUYWcgaXQsIHNpbmNlIGZpbGxJbnRlZ2VyKCkgaXMgdXNlZCB3aGVuIHdlIHdhbnQg
YSBib3hlZCBpbnRlZ2VyLgorICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNT
RVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlMgfHwgaW5mby5zcGlsbEZvcm1h
dCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwpAQCAtMTE2LDkgKzEyMSw5
IEBAIEZQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGUKICAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAg
IGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAg
R1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0KICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQo
KSkgeworICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CisgICAgICAgIAogICAg
ICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwogICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJ
bmRleCkpLCBncHIpOwpAQCAtMTQ1LDExICsxNTAsMzUgQEAgRlBSUmVnIEpJVENvZGVHZW5lcmF0
b3I6OmZpbGxEb3VibGUoTm9kZQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAg
ICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAg
ICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7
Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1
YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgc3Bp
bGxGb3JtYXQpOwotICAgICAgICAgICAgdW5sb2NrKGdwcik7CisgICAgICAgICAgICBzd2l0Y2gg
KHNwaWxsRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsKKyAg
ICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIGZwcik7CisgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91Ymxl
KGZwcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyU3BpbGxlZCk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5m
aWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIHVubG9jayhncHIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOworICAgICAgICAKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAg
ICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVk
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1
ZShncHIsIHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAt
MjYzLDkgKzI5MiwyMCBAQCBHUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUoTm9k
CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyQ29uc3RhbnQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRGF0YUZvcm1hdCBz
cGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChzcGls
bEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Cisg
ICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJl
Z2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgc3BpbGxGb3JtYXQgPSBE
YXRhRm9ybWF0SlNJbnRlZ2VyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGdwcik7CisgICAgICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXREb3Vi
bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBib3ggdGhlIGRvdWJsZSwgc2lu
Y2Ugd2Ugd2FudCBhIEpTVmFsdWUuCisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YlB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAg
IHNwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdEpTRG91YmxlOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMp
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIHNwaWxs
Rm9ybWF0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZ3ByOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk3
MDc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4Myw4ICszODMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpbmZvLnNwaWxsRm9y
bWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgICAgIC8vIGl0IHdhcyBhbHJlYWR5
IHNwaWxsZWQgcHJldmlvdXNseSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB1bmJveGluZy4KKyAgICAg
ICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBpbmZvLnNwaWxs
Rm9ybWF0KCkgIT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICAgICAgLy8gaXQgd2FzIGFs
cmVhZHkgc3BpbGxlZCBwcmV2aW91c2x5IGFuZCBub3QgYXMgYSBkb3VibGUsIHdoaWNoIG1lYW5z
IHdlIG5lZWQgdW5ib3hpbmcuCiAgICAgICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgp
ICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3Ioc3BpbGxNZSksIGNhblRyYW1wbGUpOwogICAgICAgICAgICAgdW5ib3hEb3Vi
bGUoY2FuVHJhbXBsZSwgaW5mby5mcHIoKSk7CkBAIC01MDYsMTcgKzUwNiwyMCBAQCBwcm90ZWN0
ZWQ6CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6
IHsKLSAgICAgICAgICAgIC8vIEFsbCB2YWx1ZXMgYXJlIHNwaWxsZWQgYXMgSlNWYWx1ZXMsIHNv
IGJveCB0aGUgZG91YmxlIHZpYSBhIHRlbXBvcmFyeSBncHIuCi0gICAgICAgICAgICBHUFJSZWcg
Z3ByID0gYm94RG91YmxlKGluZm8uZnByKCkpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
Z3ByLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICB1bmxv
Y2soZ3ByKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGluZm8uZnByKCksIEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHNwaWxsTWUpKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdERvdWJs
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOiB7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGlu
Zm8uZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKKyAgICAgICAgICAg
IGluZm8uc3BpbGwoRGF0YUZvcm1hdEludGVnZXIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcg
Y29kZSBoYW5kbGVzIEpTVmFsdWVzLCBpbnQzMnMsIGFuZCBjZWxscy4KLSAgICAgICAgICAgIEFT
U0VSVChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlciB8fCBzcGlsbEZvcm1hdCA9PSBE
YXRhRm9ybWF0Q2VsbCB8fCBzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAg
ICBBU1NFUlQoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwgc3BpbGxGb3JtYXQgJiBE
YXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJSZWcgcmVnID0gaW5m
by5ncHIoKTsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYm94IGludDMyIGFuZCBjZWxsIHZh
bHVlcyAuLi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCShyZXZpc2lvbiA5NzA3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDggQEAgdm9pZCBK
SVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIGZvciAoaW50IGluZGV4ID0g
MDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CiAgICAgICAg
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4
KTsKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNl
IEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGNhc2UgRG91YmxlRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6
CiAgICAgICAgICAgICBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMrKzsKICAgICAg
ICAgICAgIEFTU0VSVCgoaW50KXJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpID49IDApOwpAQCAt
MjQ5LDE3ICsyNTEsNDMgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9T
UgogICAgICAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5kZXggPSAwOwogICAgICAgICAg
ICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7
ICsraW5kZXgpIHsKICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlY292
ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVj
b3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVu
dEluZGV4KyspKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7CisgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAg
ICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rl
cigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAg
ICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7
CisgICAgICAgICAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNh
c2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAgICAgICAgICAgICAg
R1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7Cisg
ICAgICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSksIGdwcik7CisgICAgICAgICAgICAgICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGRpc3BsYWNlbWVudEluZGV4ID0gMDsK
ICAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVj
b3ZlcmllcygpOyArK2luZGV4KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICAgICAgICAg
IGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BS
SW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgYWRkcmVzc0ZvcigoVmlydHVh
bFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAg
IHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIERp
c3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
ZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHRo
ZSBzaHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNlCkBAIC0yODEsMTkgKzMwOSw0NiBAQCB2
b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgICAgIAogICAgICAg
ICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVz
KCk7ICsraW5kZXgpIHsKICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAg
ICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5k
ZXgrKyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3Rl
ckZpbGU6CisgICAgICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKKyAgICAgICAg
ICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAg
ICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsr
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlOiB7CisgICAgICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNv
dmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRj
aEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVy
T2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7CiAgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9
IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewogICAgICAg
ICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292
ZXJ5KGluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0g
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAs
IGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkp
KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAg
ICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgY2Fz
ZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICAgICAgbG9h
ZFB0cihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09
IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0
dWFsUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gOTcwNzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKIAog
ICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0
Tm9uZTogewotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3Rh
bnQobm9kZUluZGV4KSkgeworICAgICAgICBpZiAoKG5vZGUuaGFzQ29uc3RhbnQoKSAmJiAhaXNJ
bnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0RG91YmxlKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigp
OwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAg
ICAgICByZXR1cm4gYWxsb2NhdGUoKTsKQEAgLTYyLDExICs2MiwxMiBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7Ci0gICAgICAgIEFT
U0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgIAorICAgICAgICBBU1NF
UlQoKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9y
bWF0SW50ZWdlcik7CiAgICAgICAgIAogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIAotICAgICAgICBpZiAoc3Bp
bGxGb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcikgeworICAgICAgICBpZiAoc3BpbGxGb3Jt
YXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlciB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50
ZWdlcikgewogICAgICAgICAgICAgLy8gSWYgd2Uga25vdyB0aGlzIHdhcyBzcGlsbGVkIGFzIGFu
IGludGVnZXIgd2UgY2FuIGZpbGwgd2l0aG91dCBjaGVja2luZy4KICAgICAgICAgICAgIGlmIChz
dHJpY3QpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKQEAgLTc0LDcgKzc1LDExIEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgICAgICAgICByZXR1cm5G
b3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgaWYgKHNwaWxsRm9y
bWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAg
ICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIp
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICAgICAg
aW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAgICAg
cmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEpTSW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBn
cHI7CkBAIC0xNzUsOSArMTgwLDkgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlRG91YgogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0Tm9uZSkgewotICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLQogICAgICAgICBp
ZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2Nh
dGUoKTsKKwogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CiAg
ICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIoc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZU9m
SW50MzJDb25zdGFudChub2RlSW5kZXgpKSkpKSwgZ3ByKTsKQEAgLTIwMywxMSArMjA4LDM1IEBA
IEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQo
KTsKLSAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAg
bV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwot
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlciksIGdwcik7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBzcGlsbEZvcm1hdCk7
Ci0gICAgICAgIHVubG9jayhncHIpOworICAgICAgICBzd2l0Y2ggKHNwaWxsRm9ybWF0KSB7Cisg
ICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogeworICAgICAgICAgICAgRlBSUmVnIGZwciA9
IGZwckFsbG9jYXRlKCk7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7CisgICAgICAgICAgICBtX2ZwcnMu
cmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKKyAgICAgICAg
ICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICAgICAgcmV0dXJuIGZwcjsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsKKyAg
ICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxl
ZCk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsK
KyAgICAgICAgICAgIHVubG9jayhncHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7
CisKKyAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAg
ICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3Bp
bGxlZCk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdw
ciwgc3BpbGxGb3JtYXQpOworICAgICAgICAgICAgdW5sb2NrKGdwcik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1h
dCgpKSB7CkBAIC0zMDAsNiArMzI5LDExIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUNlbGwKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAg
Y2FzZSBEYXRhRm9ybWF0Tm9uZTogeworICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09
IERhdGFGb3JtYXRJbnRlZ2VyIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91
YmxlKSB7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigpOworICAg
ICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAg
IEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCiAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50
KCkpIHsKQEAgLTM2OCw2ICs0MDIsMTEgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlQm9vbAogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBj
YXNlIERhdGFGb3JtYXROb25lOiB7CisgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0g
RGF0YUZvcm1hdEludGVnZXIgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3Vi
bGUpIHsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CisgICAg
ICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
R1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQo
KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDk3MDc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNiw3ICs1MTYsNyBAQCBW
YWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsCiAgICAgICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIoaW5mb1B0ci0+Z3ByKCksIGluZm9QdHItPnJlZ2lzdGVy
Rm9ybWF0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgp
ICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZVB0
ci0+dmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5v
ZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSwgaW5mb1B0ci0+c3BpbGxGb3JtYXQoKSk7CiAgICAg
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gOTcwNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsOSBAQCBlbnVt
IFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgewogICAgIEluRlBSLAogICAgIC8vIEl0J3MgaW4gdGhl
IHJlZ2lzdGVyIGZpbGUsIGJ1dCBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbi4KICAgICBEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGluIHRoZSByZWdpc3RlciBmaWxlLCBhdCBh
IGRpZmZlcmVudCBsb2NhdGlvbiwgYW5kIGl0J3MgdW5ib3hlZC4KKyAgICBJbnQzMkRpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlLAorICAgIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAogICAg
IC8vIEl0J3MgYSBjb25zdGFudC4KICAgICBDb25zdGFudCwKICAgICAvLyBEb24ndCBrbm93IGhv
dyB0byByZWNvdmVyIGl0LgpAQCAtMjI2LDEwICsyMjksMjMgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBkaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZShWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZykKKyAgICBzdGF0
aWMgVmFsdWVSZWNvdmVyeSBkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZywgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQogICAgIHsKICAgICAgICAgVmFsdWVS
ZWNvdmVyeSByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlOworICAgICAgICBzd2l0Y2ggKGRhdGFGb3JtYXQpIHsKKyAgICAgICAgY2Fz
ZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IElu
dDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgICAgICAgICByZXN1bHQu
bV90ZWNobmlxdWUgPSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZGF0YUZvcm1h
dCAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBkYXRhRm9ybWF0ICE9IERhdGFGb3JtYXRTdG9yYWdlKTsK
KyAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmVzdWx0Lm1fc291cmNl
LnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
QEAgLTI3Miw3ICsyODgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUg
PT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpOworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUg
PT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUgfHwgbV90ZWNobmlxdWUgPT0gSW50MzJEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZSB8fCBtX3RlY2huaXF1ZSA9PSBEb3VibGVEaXNwbGFjZWRJblJlZ2lz
dGVyRmlsZSk7CiAgICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0dWFsUmVnOwogICAgIH0KICAg
ICAK
</data>
<flag name="review"
          id="107925"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>