<?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>123995</bug_id>
          
          <creation_ts>2013-11-07 08:10:46 -0800</creation_ts>
          <short_desc>[CSS Grid Layout] Cache several vectors to avoid malloc/free churn</short_desc>
          <delta_ts>2013-11-25 00:19:45 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>124408</dependson>
          <blocked>123989</blocked>
    
    <blocked>123994</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>948265</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2013-11-07 08:10:46 -0800</bug_when>
    <thetext>We should probably merge:

    Cache several vectors to avoid malloc/free churn
    
    distributeSpaceToTracks and
    resolveContentBasedTrackSizingFunctionsForItems are both
    called in a loop during layout and resulted in a lot of
    mallocs / frees calls. This change just keeps their Vectors
    around until the end of Layout, keeping the memory around.
    
    This is a classic runtime vs memory trade-off as we will hold
    onto the biggest allocation until the end of layout, which
    should be fine as we *have* to allocate that amount.
    
    This code refactors the often passed-in arguments &amp; the cached
    Vectors into a new data structure GridSizingData. This makes
    the code cleaner while making it difficult to forget free&apos;ing
    the memory at the end of layout.
    
    This is a 40% improvement on auto-grid-lots-of-data.html.
    
    BUG=273238
    
    Review URL: https://chromiumcodereview.appspot.com/24331003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951623</commentid>
    <comment_count>1</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2013-11-18 08:42:59 -0800</bug_when>
    <thetext>I have a patch ready for this, but I won&apos;t upload it as it depends in another two patches already pending on review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953494</commentid>
    <comment_count>2</comment_count>
      <attachid>217664</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2013-11-22 03:19:40 -0800</bug_when>
    <thetext>Created attachment 217664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953619</commentid>
    <comment_count>3</comment_count>
      <attachid>217664</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-11-22 10:46:56 -0800</bug_when>
    <thetext>Comment on attachment 217664
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Layouting the grid items means a lot of calls to

Laying-out</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953909</commentid>
    <comment_count>4</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2013-11-25 00:19:45 -0800</bug_when>
    <thetext>Committed r159741: &lt;http://trac.webkit.org/changeset/159741&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217664</attachid>
            <date>2013-11-22 03:19:40 -0800</date>
            <delta_ts>2013-11-22 10:46:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123995-20131122121939.patch</filename>
            <type>text/plain</type>
            <size>21601</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5Njg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDRjOTI4NTE1ODUwNDli
Y2NlMzg3MzY0NzE1YTBlMjNhNTJiYTVjZS4uODNlYjg4MDk2ZjY5YzVmZjBlNTg0ODVmNTdjMzk2
Yjc3ZWI2YWM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQzIEBACiAyMDEzLTExLTE4ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCisgICAgICAgIFtDU1MgR3Jp
ZCBMYXlvdXRdIENhY2hlIHNldmVyYWwgdmVjdG9ycyB0byBhdm9pZCBtYWxsb2MvZnJlZSBjaHVy
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzOTk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRnJvbSBC
bGluayByMTU4MjI4IGJ5IDxqY2hhZmZyYWl4QGNocm9taXVtLm9yZz4KKworICAgICAgICBMYXlv
dXRpbmcgdGhlIGdyaWQgaXRlbXMgbWVhbnMgYSBsb3Qgb2YgY2FsbHMgdG8KKyAgICAgICAgZGlz
dHJpYnV0ZVNwYWNlVG9UcmFja3MoKSBhbmQKKyAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRy
YWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoKSBhcyB0aGV5J3JlCisgICAgICAgIGNhbGxlZCBp
biBhIGxvb3AuIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBhIGxvdCBvZiBtYWxsb2MvZnJlZQor
ICAgICAgICBnb2luZyBvbiB0aGVyZS4gQnkgbW92aW5nIHRoZSB2ZWN0b3JzIHVzZWQgYnkgdGhl
c2UgbWV0aG9kcyB0byBhCisgICAgICAgIG5ldyBjbGFzcyB3aGljaCBpcyBrZXB0IGR1cmluZyB0
aGUgd2hvbGUgbGF5b3V0IHByb2Nlc3Mgd2Ugc2F2ZSBhCisgICAgICAgIGxvdCBvZiB0aG9zZSBj
YWxscy4KKworICAgICAgICBUaGlzIG9idmlvdXNseSBtZWFuIHRoYXQgdGhlIHByaWNlIHdlIHBh
eSBmb3IgYSBzaWduaWZpY2FudAorICAgICAgICBwZXJmb21hbmNlIGltcHJvdmVtZW50IGlzIHRo
YXQgd2Uga2VlcCB0aGUgbWF4aW11bSBhbGxvY2F0aW9uIHRpbGwKKyAgICAgICAgdGhlIGVuZCBv
ZiBlYWNoIGxheW91dCwgYnV0IGl0J3MgYW4gYW1vdW50IG9mIG1lbW9yeSB0aGF0IHdlIGhhdmUK
KyAgICAgICAgdG8gYWxsb2NhdGUgYW55d2F5LiBUaGUgaW1wcm92ZW1lbnQgaW4gdGhlCisgICAg
ICAgIGF1dG8tZ3JpZC1sb3RzLW9mLWRhdGEuaHRtbCBwZXJmIHRlc3QgaXMgfjI0JSAoMTY1IHJ1
bnMvcyB2cyAyMDcKKyAgICAgICAgcnVucy9zKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgcmVx
dWlyZWQgYXMgd2UncmUganVzdCByZWZhY3RvcmluZyBjb2RlIHRvIGEgbmV3CisgICAgICAgIGhl
bHBlciBjbGFzcy4gTmV2ZXJ0aGVsZXNzIHRoZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBpcyBi
YWNrZWQKKyAgICAgICAgYnkgdGhlIHBlcmYgdGVzdCBtZW50aW9uZWQgYWJvdmUuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJH
cmlkOjpHcmlkU2l6aW5nRGF0YTo6R3JpZFNpemluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyR3JpZDo6Y29tcHV0ZWRVc2VkQnJlYWR0aE9mR3JpZFRyYWNrcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cmVzb2x2ZUNvbnRlbnRCYXNlZFRy
YWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6bGF5b3V0R3JpZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmZpbmRD
aGlsZExvZ2ljYWxQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuaDoK
KworMjAxMy0xMS0xOCAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4K
KwogICAgICAgICBbQ1NTIEdyaWQgTGF5b3V0XSBJbXByb3ZlIGNvbnRlbnQtc2l6ZWQgdHJhY2sg
bGF5b3V0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjQ0MDgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4IDcxNmQ2
ZmJiYWUyOGQwYTIzOGFlMDU0ZThlY2JhNTZjMGFhNmJjODAuLmIyZWIzNTNjNjk2ZjM5MjU0ZjFi
Njk0YjUxOGJlMWVjMTYwMDQ5YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5jcHAKQEAgLTE0MSw2ICsxNDEsMjQgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jaGlsZElu
ZGV4OwogfTsKIAorY2xhc3MgUmVuZGVyR3JpZDo6R3JpZFNpemluZ0RhdGEgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEdyaWRTaXppbmdEYXRhKTsKK3B1YmxpYzoKKyAgICBHcmlkU2l6aW5n
RGF0YShzaXplX3QgZ3JpZENvbHVtbkNvdW50LCBzaXplX3QgZ3JpZFJvd0NvdW50KQorICAgICAg
ICA6IGNvbHVtblRyYWNrcyhncmlkQ29sdW1uQ291bnQpCisgICAgICAgICwgcm93VHJhY2tzKGdy
aWRSb3dDb3VudCkKKyAgICB7CisgICAgfQorCisgICAgVmVjdG9yPEdyaWRUcmFjaz4gY29sdW1u
VHJhY2tzOworICAgIFZlY3RvcjxHcmlkVHJhY2s+IHJvd1RyYWNrczsKKyAgICBWZWN0b3I8c2l6
ZV90PiBjb250ZW50U2l6ZWRUcmFja3NJbmRleDsKKworICAgIC8vIFBlcmZvcm1hbmNlIG9wdGlt
aXphdGlvbjogaG9sZCBvbnRvIHRoZXNlIFZlY3RvcnMgdW50aWwgdGhlIGVuZCBvZiBMYXlvdXQg
dG8gYXZvaWQgcmVwZWF0ZWQgbWFsbG9jIC8gZnJlZS4KKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4g
ZGlzdHJpYnV0ZVRyYWNrVmVjdG9yOworICAgIFZlY3RvcjxHcmlkVHJhY2sqPiBmaWx0ZXJlZFRy
YWNrczsKK307CisKIFJlbmRlckdyaWQ6OlJlbmRlckdyaWQoRWxlbWVudCYgZWxlbWVudCwgUGFz
c1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCiAgICAgOiBSZW5kZXJCbG9jayhlbGVtZW50LCBzdGQ6
Om1vdmUoc3R5bGUpLCAwKQogICAgICwgbV9vcmRlckl0ZXJhdG9yKCp0aGlzKQpAQCAtMjc2LDEx
ICsyOTQsMTEgQEAgTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpjb21wdXRlUHJlZmVycmVkVHJhY2tX
aWR0aChjb25zdCBHcmlkTGVuZ3RoJiBncmlkTGVuZ3RoLAogICAgIHJldHVybiAwOwogfQogCi12
b2lkIFJlbmRlckdyaWQ6OmNvbXB1dGVkVXNlZEJyZWFkdGhPZkdyaWRUcmFja3MoVHJhY2tTaXpp
bmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBWZWN0b3I8R3JpZFRyYWNrPiYgY29sdW1uVHJhY2tzLCBW
ZWN0b3I8R3JpZFRyYWNrPiYgcm93VHJhY2tzKQordm9pZCBSZW5kZXJHcmlkOjpjb21wdXRlZFVz
ZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3Jp
ZFNpemluZ0RhdGEmIHNpemluZ0RhdGEpCiB7CiAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dp
Y2FsU3BhY2UgPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gYXZhaWxhYmxlTG9naWNhbFdp
ZHRoKCkgOiBhdmFpbGFibGVMb2dpY2FsSGVpZ2h0KEluY2x1ZGVNYXJnaW5Cb3JkZXJQYWRkaW5n
KTsKLSAgICBWZWN0b3I8R3JpZFRyYWNrPiYgdHJhY2tzID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1
bW5zKSA/IGNvbHVtblRyYWNrcyA6IHJvd1RyYWNrczsKLSAgICBWZWN0b3I8c2l6ZV90PiBjb250
ZW50U2l6ZWRUcmFja3M7CisgICAgVmVjdG9yPEdyaWRUcmFjaz4mIHRyYWNrcyA9IChkaXJlY3Rp
b24gPT0gRm9yQ29sdW1ucykgPyBzaXppbmdEYXRhLmNvbHVtblRyYWNrcyA6IHNpemluZ0RhdGEu
cm93VHJhY2tzOworICAgIHNpemluZ0RhdGEuY29udGVudFNpemVkVHJhY2tzSW5kZXguc2hyaW5r
KDApOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhY2tzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSB0cmFja3NbaV07CiAgICAgICAgIGNvbnN0IEdyaWRU
cmFja1NpemUmIHRyYWNrU2l6ZSA9IGdyaWRUcmFja1NpemUoZGlyZWN0aW9uLCBpKTsKQEAgLTI5
MywxMSArMzExLDExIEBAIHZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZWRVc2VkQnJlYWR0aE9mR3Jp
ZFRyYWNrcyhUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sCiAgICAgICAgIHRyYWNrLm1f
bWF4QnJlYWR0aCA9IHN0ZDo6bWF4KHRyYWNrLm1fbWF4QnJlYWR0aCwgdHJhY2subV91c2VkQnJl
YWR0aCk7CiAKICAgICAgICAgaWYgKHRyYWNrU2l6ZS5pc0NvbnRlbnRTaXplZCgpKQotICAgICAg
ICAgICAgY29udGVudFNpemVkVHJhY2tzLmFwcGVuZChpKTsKKyAgICAgICAgICAgIHNpemluZ0Rh
dGEuY29udGVudFNpemVkVHJhY2tzSW5kZXguYXBwZW5kKGkpOwogICAgIH0KIAotICAgIGlmICgh
Y29udGVudFNpemVkVHJhY2tzLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNl
ZFRyYWNrU2l6aW5nRnVuY3Rpb25zKGRpcmVjdGlvbiwgY29sdW1uVHJhY2tzLCByb3dUcmFja3Ms
IGNvbnRlbnRTaXplZFRyYWNrcyk7CisgICAgaWYgKCFzaXppbmdEYXRhLmNvbnRlbnRTaXplZFRy
YWNrc0luZGV4LmlzRW1wdHkoKSkKKyAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6
aW5nRnVuY3Rpb25zKGRpcmVjdGlvbiwgc2l6aW5nRGF0YSk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRyYWNrcy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQodHJhY2tzW2ld
Lm1fbWF4QnJlYWR0aCAhPSBpbmZpbml0eSk7CkBAIC0zMTIsNyArMzMwLDcgQEAgdm9pZCBSZW5k
ZXJHcmlkOjpjb21wdXRlZFVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKFRyYWNrU2l6aW5nRGlyZWN0
aW9uIGRpcmVjdGlvbiwKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYWNrc1NpemU7ICsr
aSkKICAgICAgICAgdHJhY2tzRm9yRGlzdHJpYnV0aW9uW2ldID0gdHJhY2tzLmRhdGEoKSArIGk7
CiAKLSAgICBkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyh0cmFja3NGb3JEaXN0cmlidXRpb24sIDAs
ICZHcmlkVHJhY2s6OnVzZWRCcmVhZHRoLCAmR3JpZFRyYWNrOjpncm93VXNlZEJyZWFkdGgsIGF2
YWlsYWJsZUxvZ2ljYWxTcGFjZSk7CisgICAgZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3ModHJhY2tz
Rm9yRGlzdHJpYnV0aW9uLCAwLCAmR3JpZFRyYWNrOjp1c2VkQnJlYWR0aCwgJkdyaWRUcmFjazo6
Z3Jvd1VzZWRCcmVhZHRoLCBzaXppbmdEYXRhLCBhdmFpbGFibGVMb2dpY2FsU3BhY2UpOwogCiAg
ICAgLy8gNC4gR3JvdyBhbGwgR3JpZCB0cmFja3MgaGF2aW5nIGEgZnJhY3Rpb24gYXMgdGhlIE1h
eFRyYWNrU2l6aW5nRnVuY3Rpb24uCiAKQEAgLTQ4Miw1MiArNTAwLDUyIEBAIExheW91dFVuaXQg
UmVuZGVyR3JpZDo6bWF4Q29udGVudEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIFRyYWNrU2l6
aW5nRGlyZWN0aW9uCiAgICAgcmV0dXJuIGxvZ2ljYWxDb250ZW50SGVpZ2h0Rm9yQ2hpbGQoY2hp
bGQsIGNvbHVtblRyYWNrcyk7CiB9CiAKLXZvaWQgUmVuZGVyR3JpZDo6cmVzb2x2ZUNvbnRlbnRC
YXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zKFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VmVjdG9yPEdyaWRUcmFjaz4mIGNvbHVtblRyYWNrcywgVmVjdG9yPEdyaWRUcmFjaz4mIHJvd1Ry
YWNrcywgVmVjdG9yPHNpemVfdD4mIGNvbnRlbnRTaXplZFRyYWNrcykKK3ZvaWQgUmVuZGVyR3Jp
ZDo6cmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zKFRyYWNrU2l6aW5nRGly
ZWN0aW9uIGRpcmVjdGlvbiwgR3JpZFNpemluZ0RhdGEmIHNpemluZ0RhdGEpCiB7CiAgICAgLy8g
RklYTUU6IFNwbGl0IHRoZSBncmlkIHRyYWNrcyBpbnRvIGdyb3VwcyB0aGF0IGRvZXNuJ3Qgb3Zl
cmxhcCBhIDxmbGV4PiBncmlkIHRyYWNrLgogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b250ZW50U2l6ZWRUcmFja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgR3JpZEl0ZXJhdG9yIGl0
ZXJhdG9yKG1fZ3JpZCwgZGlyZWN0aW9uLCBjb250ZW50U2l6ZWRUcmFja3NbaV0pOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6aW5nRGF0YS5jb250ZW50U2l6ZWRUcmFja3NJbmRleC5z
aXplKCk7ICsraSkgeworICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBkaXJl
Y3Rpb24sIHNpemluZ0RhdGEuY29udGVudFNpemVkVHJhY2tzSW5kZXhbaV0pOwogICAgICAgICB3
aGlsZSAoUmVuZGVyQm94KiBncmlkSXRlbSA9IGl0ZXJhdG9yLm5leHRHcmlkSXRlbSgpKSB7Ci0g
ICAgICAgICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVt
cyhkaXJlY3Rpb24sIGNvbHVtblRyYWNrcywgcm93VHJhY2tzLCBncmlkSXRlbSwgJkdyaWRUcmFj
a1NpemU6Omhhc01pbk9yTWF4Q29udGVudE1pblRyYWNrQnJlYWR0aCwgJlJlbmRlckdyaWQ6Om1p
bkNvbnRlbnRGb3JDaGlsZCwgJkdyaWRUcmFjazo6dXNlZEJyZWFkdGgsICZHcmlkVHJhY2s6Omdy
b3dVc2VkQnJlYWR0aCk7Ci0gICAgICAgICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXpp
bmdGdW5jdGlvbnNGb3JJdGVtcyhkaXJlY3Rpb24sIGNvbHVtblRyYWNrcywgcm93VHJhY2tzLCBn
cmlkSXRlbSwgJkdyaWRUcmFja1NpemU6Omhhc01heENvbnRlbnRNaW5UcmFja0JyZWFkdGgsICZS
ZW5kZXJHcmlkOjptYXhDb250ZW50Rm9yQ2hpbGQsICZHcmlkVHJhY2s6OnVzZWRCcmVhZHRoLCAm
R3JpZFRyYWNrOjpncm93VXNlZEJyZWFkdGgpOwotICAgICAgICAgICAgcmVzb2x2ZUNvbnRlbnRC
YXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoZGlyZWN0aW9uLCBjb2x1bW5UcmFja3Ms
IHJvd1RyYWNrcywgZ3JpZEl0ZW0sICZHcmlkVHJhY2tTaXplOjpoYXNNaW5Pck1heENvbnRlbnRN
YXhUcmFja0JyZWFkdGgsICZSZW5kZXJHcmlkOjptaW5Db250ZW50Rm9yQ2hpbGQsICZHcmlkVHJh
Y2s6Om1heEJyZWFkdGhJZk5vdEluZmluaXRlLCAmR3JpZFRyYWNrOjpncm93TWF4QnJlYWR0aCk7
Ci0gICAgICAgICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJ
dGVtcyhkaXJlY3Rpb24sIGNvbHVtblRyYWNrcywgcm93VHJhY2tzLCBncmlkSXRlbSwgJkdyaWRU
cmFja1NpemU6Omhhc01heENvbnRlbnRNYXhUcmFja0JyZWFkdGgsICZSZW5kZXJHcmlkOjptYXhD
b250ZW50Rm9yQ2hpbGQsICZHcmlkVHJhY2s6Om1heEJyZWFkdGhJZk5vdEluZmluaXRlLCAmR3Jp
ZFRyYWNrOjpncm93TWF4QnJlYWR0aCk7CisgICAgICAgICAgICByZXNvbHZlQ29udGVudEJhc2Vk
VHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyhkaXJlY3Rpb24sIHNpemluZ0RhdGEsIGdyaWRJ
dGVtLCAmR3JpZFRyYWNrU2l6ZTo6aGFzTWluT3JNYXhDb250ZW50TWluVHJhY2tCcmVhZHRoLCAm
UmVuZGVyR3JpZDo6bWluQ29udGVudEZvckNoaWxkLCAmR3JpZFRyYWNrOjp1c2VkQnJlYWR0aCwg
JkdyaWRUcmFjazo6Z3Jvd1VzZWRCcmVhZHRoKTsKKyAgICAgICAgICAgIHJlc29sdmVDb250ZW50
QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKGRpcmVjdGlvbiwgc2l6aW5nRGF0YSwg
Z3JpZEl0ZW0sICZHcmlkVHJhY2tTaXplOjpoYXNNYXhDb250ZW50TWluVHJhY2tCcmVhZHRoLCAm
UmVuZGVyR3JpZDo6bWF4Q29udGVudEZvckNoaWxkLCAmR3JpZFRyYWNrOjp1c2VkQnJlYWR0aCwg
JkdyaWRUcmFjazo6Z3Jvd1VzZWRCcmVhZHRoKTsKKyAgICAgICAgICAgIHJlc29sdmVDb250ZW50
QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKGRpcmVjdGlvbiwgc2l6aW5nRGF0YSwg
Z3JpZEl0ZW0sICZHcmlkVHJhY2tTaXplOjpoYXNNaW5Pck1heENvbnRlbnRNYXhUcmFja0JyZWFk
dGgsICZSZW5kZXJHcmlkOjptaW5Db250ZW50Rm9yQ2hpbGQsICZHcmlkVHJhY2s6Om1heEJyZWFk
dGhJZk5vdEluZmluaXRlLCAmR3JpZFRyYWNrOjpncm93TWF4QnJlYWR0aCk7CisgICAgICAgICAg
ICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyhkaXJlY3Rp
b24sIHNpemluZ0RhdGEsIGdyaWRJdGVtLCAmR3JpZFRyYWNrU2l6ZTo6aGFzTWF4Q29udGVudE1h
eFRyYWNrQnJlYWR0aCwgJlJlbmRlckdyaWQ6Om1heENvbnRlbnRGb3JDaGlsZCwgJkdyaWRUcmFj
azo6bWF4QnJlYWR0aElmTm90SW5maW5pdGUsICZHcmlkVHJhY2s6Omdyb3dNYXhCcmVhZHRoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSAoZGlyZWN0aW9uID09IEZv
ckNvbHVtbnMpID8gY29sdW1uVHJhY2tzW2ldIDogcm93VHJhY2tzW2ldOworICAgICAgICBHcmlk
VHJhY2smIHRyYWNrID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IHNpemluZ0RhdGEuY29s
dW1uVHJhY2tzW2ldIDogc2l6aW5nRGF0YS5yb3dUcmFja3NbaV07CiAgICAgICAgIGlmICh0cmFj
ay5tX21heEJyZWFkdGggPT0gaW5maW5pdHkpCiAgICAgICAgICAgICB0cmFjay5tX21heEJyZWFk
dGggPSB0cmFjay5tX3VzZWRCcmVhZHRoOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJHcmlkOjpy
ZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyhUcmFja1Npemlu
Z0RpcmVjdGlvbiBkaXJlY3Rpb24sIFZlY3RvcjxHcmlkVHJhY2s+JiBjb2x1bW5UcmFja3MsIFZl
Y3RvcjxHcmlkVHJhY2s+JiByb3dUcmFja3MsIFJlbmRlckJveCogZ3JpZEl0ZW0sIEZpbHRlckZ1
bmN0aW9uIGZpbHRlckZ1bmN0aW9uLCBTaXppbmdGdW5jdGlvbiBzaXppbmdGdW5jdGlvbiwgQWNj
dW11bGF0b3JHZXR0ZXIgdHJhY2tHZXR0ZXIsIEFjY3VtdWxhdG9yR3Jvd0Z1bmN0aW9uIHRyYWNr
R3Jvd3RoRnVuY3Rpb24pCit2b2lkIFJlbmRlckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFj
a1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwg
R3JpZFNpemluZ0RhdGEmIHNpemluZ0RhdGEsIFJlbmRlckJveCogZ3JpZEl0ZW0sIEZpbHRlckZ1
bmN0aW9uIGZpbHRlckZ1bmN0aW9uLCBTaXppbmdGdW5jdGlvbiBzaXppbmdGdW5jdGlvbiwgQWNj
dW11bGF0b3JHZXR0ZXIgdHJhY2tHZXR0ZXIsIEFjY3VtdWxhdG9yR3Jvd0Z1bmN0aW9uIHRyYWNr
R3Jvd3RoRnVuY3Rpb24pCiB7CiAgICAgY29uc3QgR3JpZENvb3JkaW5hdGUgY29vcmRpbmF0ZSA9
IGNhY2hlZEdyaWRDb29yZGluYXRlKGdyaWRJdGVtKTsKICAgICBjb25zdCBzaXplX3QgaW5pdGlh
bFRyYWNrSW5kZXggPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gY29vcmRpbmF0ZS5jb2x1
bW5zLmluaXRpYWxQb3NpdGlvbkluZGV4IDogY29vcmRpbmF0ZS5yb3dzLmluaXRpYWxQb3NpdGlv
bkluZGV4OwogICAgIGNvbnN0IHNpemVfdCBmaW5hbFRyYWNrSW5kZXggPSAoZGlyZWN0aW9uID09
IEZvckNvbHVtbnMpID8gY29vcmRpbmF0ZS5jb2x1bW5zLmZpbmFsUG9zaXRpb25JbmRleCA6IGNv
b3JkaW5hdGUucm93cy5maW5hbFBvc2l0aW9uSW5kZXg7CiAKLSAgICBWZWN0b3I8R3JpZFRyYWNr
Kj4gdHJhY2tzOworICAgIHNpemluZ0RhdGEuZmlsdGVyZWRUcmFja3Muc2hyaW5rKDApOwogICAg
IGZvciAoc2l6ZV90IHRyYWNrSW5kZXggPSBpbml0aWFsVHJhY2tJbmRleDsgdHJhY2tJbmRleCA8
PSBmaW5hbFRyYWNrSW5kZXg7ICsrdHJhY2tJbmRleCkgewogICAgICAgICBjb25zdCBHcmlkVHJh
Y2tTaXplJiB0cmFja1NpemUgPSBncmlkVHJhY2tTaXplKGRpcmVjdGlvbiwgdHJhY2tJbmRleCk7
CiAgICAgICAgIGlmICghKHRyYWNrU2l6ZS4qZmlsdGVyRnVuY3Rpb24pKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBHcmlkVHJhY2smIHRyYWNrID0gKGRpcmVjdGlvbiA9PSBG
b3JDb2x1bW5zKSA/IGNvbHVtblRyYWNrc1t0cmFja0luZGV4XSA6IHJvd1RyYWNrc1t0cmFja0lu
ZGV4XTsKLSAgICAgICAgdHJhY2tzLmFwcGVuZCgmdHJhY2spOworICAgICAgICBHcmlkVHJhY2sm
IHRyYWNrID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IHNpemluZ0RhdGEuY29sdW1uVHJh
Y2tzW3RyYWNrSW5kZXhdIDogc2l6aW5nRGF0YS5yb3dUcmFja3NbdHJhY2tJbmRleF07CisgICAg
ICAgIHNpemluZ0RhdGEuZmlsdGVyZWRUcmFja3MuYXBwZW5kKCZ0cmFjayk7CiAgICAgfQogCi0g
ICAgaWYgKHRyYWNrcy5pc0VtcHR5KCkpCisgICAgaWYgKHNpemluZ0RhdGEuZmlsdGVyZWRUcmFj
a3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRVbml0IGFkZGl0aW9u
YWxCcmVhZHRoU3BhY2UgPSAodGhpcy0+KnNpemluZ0Z1bmN0aW9uKShncmlkSXRlbSwgZGlyZWN0
aW9uLCBjb2x1bW5UcmFja3MpOworICAgIExheW91dFVuaXQgYWRkaXRpb25hbEJyZWFkdGhTcGFj
ZSA9ICh0aGlzLT4qc2l6aW5nRnVuY3Rpb24pKGdyaWRJdGVtLCBkaXJlY3Rpb24sIHNpemluZ0Rh
dGEuY29sdW1uVHJhY2tzKTsKICAgICBmb3IgKHNpemVfdCB0cmFja0luZGV4Rm9yU3BhY2UgPSBp
bml0aWFsVHJhY2tJbmRleDsgdHJhY2tJbmRleEZvclNwYWNlIDw9IGZpbmFsVHJhY2tJbmRleDsg
Kyt0cmFja0luZGV4Rm9yU3BhY2UpIHsKLSAgICAgICAgR3JpZFRyYWNrJiB0cmFjayA9IChkaXJl
Y3Rpb24gPT0gRm9yQ29sdW1ucykgPyBjb2x1bW5UcmFja3NbdHJhY2tJbmRleEZvclNwYWNlXSA6
IHJvd1RyYWNrc1t0cmFja0luZGV4Rm9yU3BhY2VdOworICAgICAgICBHcmlkVHJhY2smIHRyYWNr
ID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IHNpemluZ0RhdGEuY29sdW1uVHJhY2tzW3Ry
YWNrSW5kZXhGb3JTcGFjZV0gOiBzaXppbmdEYXRhLnJvd1RyYWNrc1t0cmFja0luZGV4Rm9yU3Bh
Y2VdOwogICAgICAgICBhZGRpdGlvbmFsQnJlYWR0aFNwYWNlIC09ICh0cmFjay4qdHJhY2tHZXR0
ZXIpKCk7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwYXNzIGRpZmZlcmVudCB2
YWx1ZXMgZm9yIHx0cmFja3NGb3JHcm93dGhBYm92ZU1heEJyZWFkdGh8LgotICAgIGRpc3RyaWJ1
dGVTcGFjZVRvVHJhY2tzKHRyYWNrcywgJnRyYWNrcywgdHJhY2tHZXR0ZXIsIHRyYWNrR3Jvd3Ro
RnVuY3Rpb24sIGFkZGl0aW9uYWxCcmVhZHRoU3BhY2UpOworICAgIGRpc3RyaWJ1dGVTcGFjZVRv
VHJhY2tzKHNpemluZ0RhdGEuZmlsdGVyZWRUcmFja3MsICZzaXppbmdEYXRhLmZpbHRlcmVkVHJh
Y2tzLCB0cmFja0dldHRlciwgdHJhY2tHcm93dGhGdW5jdGlvbiwgc2l6aW5nRGF0YSwgYWRkaXRp
b25hbEJyZWFkdGhTcGFjZSk7CiB9CiAKIHN0YXRpYyBib29sIHNvcnRCeUdyaWRUcmFja0dyb3d0
aFBvdGVudGlhbChjb25zdCBHcmlkVHJhY2sqIHRyYWNrMSwgY29uc3QgR3JpZFRyYWNrKiB0cmFj
azIpCkBAIC01MzUsMTIgKzU1MywxMiBAQCBzdGF0aWMgYm9vbCBzb3J0QnlHcmlkVHJhY2tHcm93
dGhQb3RlbnRpYWwoY29uc3QgR3JpZFRyYWNrKiB0cmFjazEsIGNvbnN0IEdyaWRUcgogICAgIHJl
dHVybiAodHJhY2sxLT5tX21heEJyZWFkdGggLSB0cmFjazEtPm1fdXNlZEJyZWFkdGgpIDwgKHRy
YWNrMi0+bV9tYXhCcmVhZHRoIC0gdHJhY2syLT5tX3VzZWRCcmVhZHRoKTsKIH0KIAotdm9pZCBS
ZW5kZXJHcmlkOjpkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3JpZFRyYWNrKj4mIHRy
YWNrcywgVmVjdG9yPEdyaWRUcmFjayo+KiB0cmFja3NGb3JHcm93dGhBYm92ZU1heEJyZWFkdGgs
IEFjY3VtdWxhdG9yR2V0dGVyIHRyYWNrR2V0dGVyLCBBY2N1bXVsYXRvckdyb3dGdW5jdGlvbiB0
cmFja0dyb3d0aEZ1bmN0aW9uLCBMYXlvdXRVbml0JiBhdmFpbGFibGVMb2dpY2FsU3BhY2UpCit2
b2lkIFJlbmRlckdyaWQ6OmRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzKFZlY3RvcjxHcmlkVHJhY2sq
PiYgdHJhY2tzLCBWZWN0b3I8R3JpZFRyYWNrKj4qIHRyYWNrc0Zvckdyb3d0aEFib3ZlTWF4QnJl
YWR0aCwgQWNjdW11bGF0b3JHZXR0ZXIgdHJhY2tHZXR0ZXIsIEFjY3VtdWxhdG9yR3Jvd0Z1bmN0
aW9uIHRyYWNrR3Jvd3RoRnVuY3Rpb24sIEdyaWRTaXppbmdEYXRhJiBzaXppbmdEYXRhLCBMYXlv
dXRVbml0JiBhdmFpbGFibGVMb2dpY2FsU3BhY2UpCiB7CiAgICAgc3RkOjpzb3J0KHRyYWNrcy5i
ZWdpbigpLCB0cmFja3MuZW5kKCksIHNvcnRCeUdyaWRUcmFja0dyb3d0aFBvdGVudGlhbCk7CiAK
ICAgICBzaXplX3QgdHJhY2tzU2l6ZSA9IHRyYWNrcy5zaXplKCk7Ci0gICAgVmVjdG9yPExheW91
dFVuaXQ+IHVwZGF0ZWRUcmFja0JyZWFkdGhzKHRyYWNrc1NpemUpOworICAgIHNpemluZ0RhdGEu
ZGlzdHJpYnV0ZVRyYWNrVmVjdG9yLnJlc2l6ZSh0cmFja3NTaXplKTsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdHJhY2tzU2l6ZTsgKytpKSB7CiAgICAgICAgIEdyaWRUcmFjayYgdHJh
Y2sgPSAqdHJhY2tzW2ldOwpAQCAtNTQ4LDcgKzU2Niw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6ZGlz
dHJpYnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+JiB0cmFja3MsIFZlY3RvcjxH
cmlkCiAgICAgICAgIExheW91dFVuaXQgdHJhY2tCcmVhZHRoID0gKHRyYWNrc1tpXS0+KnRyYWNr
R2V0dGVyKSgpOwogICAgICAgICBMYXlvdXRVbml0IGdyb3d0aFNoYXJlID0gc3RkOjptYXgoTGF5
b3V0VW5pdCgpLCBzdGQ6Om1pbihhdmFpbGFibGVMb2dpY2FsU3BhY2VTaGFyZSwgdHJhY2subV9t
YXhCcmVhZHRoIC0gdHJhY2tCcmVhZHRoKSk7CiAgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBz
aHJpbmsgYW55IGdyaWQgdHJhY2sgb3IgZWxzZSB3ZSBjYW4ndCBndWFyYW50ZWUgd2UgYWJpZGUg
Ynkgb3VyIG1pbi1zaXppbmcgZnVuY3Rpb24uCi0gICAgICAgIHVwZGF0ZWRUcmFja0JyZWFkdGhz
W2ldID0gdHJhY2tCcmVhZHRoICsgZ3Jvd3RoU2hhcmU7CisgICAgICAgIHNpemluZ0RhdGEuZGlz
dHJpYnV0ZVRyYWNrVmVjdG9yW2ldID0gdHJhY2tCcmVhZHRoICsgZ3Jvd3RoU2hhcmU7CiAgICAg
ICAgIGF2YWlsYWJsZUxvZ2ljYWxTcGFjZSAtPSBncm93dGhTaGFyZTsKICAgICB9CiAKQEAgLTU1
NiwxMyArNTc0LDEzIEBAIHZvaWQgUmVuZGVyR3JpZDo6ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3Mo
VmVjdG9yPEdyaWRUcmFjayo+JiB0cmFja3MsIFZlY3RvcjxHcmlkCiAgICAgICAgIHRyYWNrc1Np
emUgPSB0cmFja3NGb3JHcm93dGhBYm92ZU1heEJyZWFkdGgtPnNpemUoKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0cmFja3NTaXplOyArK2kpIHsKICAgICAgICAgICAgIExheW91
dFVuaXQgZ3Jvd3RoU2hhcmUgPSBhdmFpbGFibGVMb2dpY2FsU3BhY2UgLyAodHJhY2tzU2l6ZSAt
IGkpOwotICAgICAgICAgICAgdXBkYXRlZFRyYWNrQnJlYWR0aHNbaV0gKz0gZ3Jvd3RoU2hhcmU7
CisgICAgICAgICAgICBzaXppbmdEYXRhLmRpc3RyaWJ1dGVUcmFja1ZlY3RvcltpXSArPSBncm93
dGhTaGFyZTsKICAgICAgICAgICAgIGF2YWlsYWJsZUxvZ2ljYWxTcGFjZSAtPSBncm93dGhTaGFy
ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhY2tz
U2l6ZTsgKytpKSB7Ci0gICAgICAgIExheW91dFVuaXQgZ3Jvd3RoID0gdXBkYXRlZFRyYWNrQnJl
YWR0aHNbaV0gLSAodHJhY2tzW2ldLT4qdHJhY2tHZXR0ZXIpKCk7CisgICAgICAgIExheW91dFVu
aXQgZ3Jvd3RoID0gc2l6aW5nRGF0YS5kaXN0cmlidXRlVHJhY2tWZWN0b3JbaV0gLSAodHJhY2tz
W2ldLT4qdHJhY2tHZXR0ZXIpKCk7CiAgICAgICAgIGlmIChncm93dGggPj0gMCkKICAgICAgICAg
ICAgICh0cmFja3NbaV0tPip0cmFja0dyb3d0aEZ1bmN0aW9uKShncm93dGgpOwogICAgIH0KQEAg
LTc2MCwxNSArNzc4LDE0IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0R3JpZEl0ZW1zKCkKIHsK
ICAgICBwbGFjZUl0ZW1zT25HcmlkKCk7CiAKLSAgICBWZWN0b3I8R3JpZFRyYWNrPiBjb2x1bW5U
cmFja3MoZ3JpZENvbHVtbkNvdW50KCkpOwotICAgIFZlY3RvcjxHcmlkVHJhY2s+IHJvd1RyYWNr
cyhncmlkUm93Q291bnQoKSk7Ci0gICAgY29tcHV0ZWRVc2VkQnJlYWR0aE9mR3JpZFRyYWNrcyhG
b3JDb2x1bW5zLCBjb2x1bW5UcmFja3MsIHJvd1RyYWNrcyk7Ci0gICAgQVNTRVJUKHRyYWNrc0Fy
ZVdpZGVyVGhhbk1pblRyYWNrQnJlYWR0aChGb3JDb2x1bW5zLCBjb2x1bW5UcmFja3MpKTsKLSAg
ICBjb21wdXRlZFVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKEZvclJvd3MsIGNvbHVtblRyYWNrcywg
cm93VHJhY2tzKTsKLSAgICBBU1NFUlQodHJhY2tzQXJlV2lkZXJUaGFuTWluVHJhY2tCcmVhZHRo
KEZvclJvd3MsIHJvd1RyYWNrcykpOworICAgIEdyaWRTaXppbmdEYXRhIHNpemluZ0RhdGEoZ3Jp
ZENvbHVtbkNvdW50KCksIGdyaWRSb3dDb3VudCgpKTsKKyAgICBjb21wdXRlZFVzZWRCcmVhZHRo
T2ZHcmlkVHJhY2tzKEZvckNvbHVtbnMsIHNpemluZ0RhdGEpOworICAgIEFTU0VSVCh0cmFja3NB
cmVXaWRlclRoYW5NaW5UcmFja0JyZWFkdGgoRm9yQ29sdW1ucywgc2l6aW5nRGF0YS5jb2x1bW5U
cmFja3MpKTsKKyAgICBjb21wdXRlZFVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKEZvclJvd3MsIHNp
emluZ0RhdGEpOworICAgIEFTU0VSVCh0cmFja3NBcmVXaWRlclRoYW5NaW5UcmFja0JyZWFkdGgo
Rm9yUm93cywgc2l6aW5nRGF0YS5yb3dUcmFja3MpKTsKIAogICAgIGZvciAoUmVuZGVyQm94KiBj
aGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
Qm94KCkpIHsKLSAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb3NpdGlvbiA9IGZpbmRDaGlsZExv
Z2ljYWxQb3NpdGlvbihjaGlsZCwgY29sdW1uVHJhY2tzLCByb3dUcmFja3MpOworICAgICAgICBM
YXlvdXRQb2ludCBjaGlsZFBvc2l0aW9uID0gZmluZENoaWxkTG9naWNhbFBvc2l0aW9uKGNoaWxk
LCBzaXppbmdEYXRhKTsKIAogICAgICAgICAvLyBCZWNhdXNlIHRoZSBncmlkIGFyZWEgY2Fubm90
IGJlIHN0eWxlZCwgd2UgZG9uJ3QgbmVlZCB0byBhZGp1c3QKICAgICAgICAgLy8gdGhlIGdyaWQg
YnJlYWR0aCB0byBhY2NvdW50IGZvciAnYm94LXNpemluZycuCkBAIC03NzcsOCArNzk0LDggQEAg
dm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRHcmlkSXRlbXMoKQogCiAgICAgICAgIC8vIEZJWE1FOiBG
b3IgY2hpbGRyZW4gaW4gYSBjb250ZW50IHNpemVkIHRyYWNrLCB3ZSBjbGVhciB0aGUgb3ZlcnJp
ZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodAogICAgICAgICAvLyBpbiBtaW5D
b250ZW50Rm9yQ2hpbGQgLyBtYXhDb250ZW50Rm9yQ2hpbGQgd2hpY2ggbWVhbnMgdGhhdCB3ZSB3
aWxsIGFsd2F5cyByZWxheW91dCB0aGUgY2hpbGQuCi0gICAgICAgIExheW91dFVuaXQgb3ZlcnJp
ZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoID0gZ3JpZEFyZWFCcmVhZHRoRm9y
Q2hpbGQoY2hpbGQsIEZvckNvbHVtbnMsIGNvbHVtblRyYWNrcyk7Ci0gICAgICAgIExheW91dFVu
aXQgb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCA9IGdyaWRBcmVh
QnJlYWR0aEZvckNoaWxkKGNoaWxkLCBGb3JSb3dzLCByb3dUcmFja3MpOworICAgICAgICBMYXlv
dXRVbml0IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCA9IGdyaWRB
cmVhQnJlYWR0aEZvckNoaWxkKGNoaWxkLCBGb3JDb2x1bW5zLCBzaXppbmdEYXRhLmNvbHVtblRy
YWNrcyk7CisgICAgICAgIExheW91dFVuaXQgb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50
TG9naWNhbEhlaWdodCA9IGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNoaWxkLCBGb3JSb3dzLCBz
aXppbmdEYXRhLnJvd1RyYWNrcyk7CiAgICAgICAgIGlmIChvbGRPdmVycmlkZUNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsV2lkdGggIT0gb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50
TG9naWNhbFdpZHRoIHx8IChvbGRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2Fs
SGVpZ2h0ICE9IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQgJiYg
KGNoaWxkLT5oYXNSZWxhdGl2ZUxvZ2ljYWxIZWlnaHQoKSB8fCBjaGlsZC0+aGFzVmlld3BvcnRQ
ZXJjZW50YWdlTG9naWNhbEhlaWdodCgpKSkpCiAgICAgICAgICAgICBjaGlsZC0+c2V0TmVlZHNM
YXlvdXQoTWFya09ubHlUaGlzKTsKIApAQCAtODAyLDggKzgxOSw4IEBAIHZvaWQgUmVuZGVyR3Jp
ZDo6bGF5b3V0R3JpZEl0ZW1zKCkKICAgICAgICAgICAgIGNoaWxkLT5yZXBhaW50RHVyaW5nTGF5
b3V0SWZNb3ZlZChvbGRDaGlsZFJlY3QpOwogICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcm93VHJhY2tzLnNpemUoKTsgKytpKQotICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxv
Z2ljYWxIZWlnaHQoKSArIHJvd1RyYWNrc1tpXS5tX3VzZWRCcmVhZHRoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemluZ0RhdGEucm93VHJhY2tzLnNpemUoKTsgKytpKQorICAgICAg
ICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSArIHNpemluZ0RhdGEucm93VHJhY2tz
W2ldLm1fdXNlZEJyZWFkdGgpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUgbWlu
IC8gbWF4IGxvZ2ljYWwgaGVpZ2h0LgogCkBAIC0xMDMzLDE3ICsxMDUwLDE3IEBAIExheW91dFVu
aXQgUmVuZGVyR3JpZDo6Z3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94KiBj
aGlsZCwgVHJhY2tTaXppCiAgICAgcmV0dXJuIGdyaWRBcmVhQnJlYWR0aDsKIH0KIAotTGF5b3V0
UG9pbnQgUmVuZGVyR3JpZDo6ZmluZENoaWxkTG9naWNhbFBvc2l0aW9uKFJlbmRlckJveCogY2hp
bGQsIGNvbnN0IFZlY3RvcjxHcmlkVHJhY2s+JiBjb2x1bW5UcmFja3MsIGNvbnN0IFZlY3RvcjxH
cmlkVHJhY2s+JiByb3dUcmFja3MpCitMYXlvdXRQb2ludCBSZW5kZXJHcmlkOjpmaW5kQ2hpbGRM
b2dpY2FsUG9zaXRpb24oUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgR3JpZFNpemluZ0RhdGEmIHNp
emluZ0RhdGEpCiB7CiAgICAgY29uc3QgR3JpZENvb3JkaW5hdGUmIGNvb3JkaW5hdGUgPSBjYWNo
ZWRHcmlkQ29vcmRpbmF0ZShjaGlsZCk7CiAKICAgICAvLyBUaGUgZ3JpZCBpdGVtcyBzaG91bGQg
YmUgaW5zaWRlIHRoZSBncmlkIGNvbnRhaW5lcidzIGJvcmRlciBib3gsIHRoYXQncyB3aHkgdGhl
eSBuZWVkIHRvIGJlIHNoaWZ0ZWQuCiAgICAgTGF5b3V0UG9pbnQgb2Zmc2V0KGJvcmRlckFuZFBh
ZGRpbmdTdGFydCgpLCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpOwogICAgIC8vIEZJWE1FOiB8
Y29sdW1uVHJhY2t8IGFuZCB8cm93VHJhY2t8IHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gb3VyIGNv
bHVtbiAvIHJvdyBjb3VudC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvb3JkaW5hdGUu
Y29sdW1ucy5pbml0aWFsUG9zaXRpb25JbmRleCAmJiBpIDwgY29sdW1uVHJhY2tzLnNpemUoKTsg
KytpKQotICAgICAgICBvZmZzZXQuc2V0WChvZmZzZXQueCgpICsgY29sdW1uVHJhY2tzW2ldLm1f
dXNlZEJyZWFkdGgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29vcmRpbmF0ZS5yb3dz
LmluaXRpYWxQb3NpdGlvbkluZGV4ICYmIGkgPCByb3dUcmFja3Muc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG9mZnNldC5zZXRZKG9mZnNldC55KCkgKyByb3dUcmFja3NbaV0ubV91c2VkQnJlYWR0aCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb29yZGluYXRlLmNvbHVtbnMuaW5pdGlhbFBv
c2l0aW9uSW5kZXggJiYgaSA8IHNpemluZ0RhdGEuY29sdW1uVHJhY2tzLnNpemUoKTsgKytpKQor
ICAgICAgICBvZmZzZXQuc2V0WChvZmZzZXQueCgpICsgc2l6aW5nRGF0YS5jb2x1bW5UcmFja3Nb
aV0ubV91c2VkQnJlYWR0aCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb29yZGluYXRl
LnJvd3MuaW5pdGlhbFBvc2l0aW9uSW5kZXggJiYgaSA8IHNpemluZ0RhdGEucm93VHJhY2tzLnNp
emUoKTsgKytpKQorICAgICAgICBvZmZzZXQuc2V0WShvZmZzZXQueSgpICsgc2l6aW5nRGF0YS5y
b3dUcmFja3NbaV0ubV91c2VkQnJlYWR0aCk7CiAKICAgICAvLyBGSVhNRTogSGFuZGxlIG1hcmdp
bnMgb24gdGhlIGdyaWQgaXRlbS4KICAgICByZXR1cm4gb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHcmlkLmgKaW5kZXggYzcwMDdkZTljZWZhNTM3NmRhNWQ0ZmZlZGMwZDg0Nzhk
ZmFlMDJmMS4uNmRjM2E1NDQzNTVlZTU2OWQ0M2FiNDRhYzQzNjJhMDk1ZDAwYjQwNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCkBAIC02NCwxMiArNjQsMTMgQEAgcHJpdmF0
ZToKICAgICBMYXlvdXRVbml0IGNvbXB1dGVQcmVmZXJyZWRUcmFja1dpZHRoKGNvbnN0IEdyaWRM
ZW5ndGgmLCBzaXplX3QpIGNvbnN0OwogCiAgICAgY2xhc3MgR3JpZEl0ZXJhdG9yOworICAgIGNs
YXNzIEdyaWRTaXppbmdEYXRhOwogICAgIGVudW0gVHJhY2tTaXppbmdEaXJlY3Rpb24geyBGb3JD
b2x1bW5zLCBGb3JSb3dzIH07Ci0gICAgdm9pZCBjb21wdXRlZFVzZWRCcmVhZHRoT2ZHcmlkVHJh
Y2tzKFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBWZWN0b3I8R3JpZFRyYWNrPiYgY29sdW1uVHJhY2tz
LCBWZWN0b3I8R3JpZFRyYWNrPiYgcm93VHJhY2tzKTsKKyAgICB2b2lkIGNvbXB1dGVkVXNlZEJy
ZWFkdGhPZkdyaWRUcmFja3MoVHJhY2tTaXppbmdEaXJlY3Rpb24sIEdyaWRTaXppbmdEYXRhJik7
CiAgICAgTGF5b3V0VW5pdCBjb21wdXRlVXNlZEJyZWFkdGhPZk1pbkxlbmd0aChUcmFja1Npemlu
Z0RpcmVjdGlvbiwgY29uc3QgR3JpZExlbmd0aCYpIGNvbnN0OwogICAgIExheW91dFVuaXQgY29t
cHV0ZVVzZWRCcmVhZHRoT2ZNYXhMZW5ndGgoVHJhY2tTaXppbmdEaXJlY3Rpb24sIGNvbnN0IEdy
aWRMZW5ndGgmLCBMYXlvdXRVbml0IHVzZWRCcmVhZHRoKSBjb25zdDsKICAgICBMYXlvdXRVbml0
IGNvbXB1dGVVc2VkQnJlYWR0aE9mU3BlY2lmaWVkTGVuZ3RoKFRyYWNrU2l6aW5nRGlyZWN0aW9u
LCBjb25zdCBMZW5ndGgmKSBjb25zdDsKLSAgICB2b2lkIHJlc29sdmVDb250ZW50QmFzZWRUcmFj
a1NpemluZ0Z1bmN0aW9ucyhUcmFja1NpemluZ0RpcmVjdGlvbiwgVmVjdG9yPEdyaWRUcmFjaz4m
IGNvbHVtblRyYWNrcywgVmVjdG9yPEdyaWRUcmFjaz4mIHJvd1RyYWNrcywgVmVjdG9yPHNpemVf
dD4mIGNvbnRlbnRTaXplZFRyYWNrcyk7CisgICAgdm9pZCByZXNvbHZlQ29udGVudEJhc2VkVHJh
Y2tTaXppbmdGdW5jdGlvbnMoVHJhY2tTaXppbmdEaXJlY3Rpb24sIEdyaWRTaXppbmdEYXRhJik7
CiAKICAgICB2b2lkIGdyb3dHcmlkKFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKICAgICB2b2lkIGlu
c2VydEl0ZW1JbnRvR3JpZChSZW5kZXJCb3gqLCBzaXplX3Qgcm93VHJhY2ssIHNpemVfdCBjb2x1
bW5UcmFjayk7CkBAIC04OSw4ICs5MCw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBMYXlvdXRV
bml0IChHcmlkVHJhY2s6OiogQWNjdW11bGF0b3JHZXR0ZXIpKCkgY29uc3Q7CiAgICAgdHlwZWRl
ZiB2b2lkIChHcmlkVHJhY2s6OiogQWNjdW11bGF0b3JHcm93RnVuY3Rpb24pKExheW91dFVuaXQp
OwogICAgIHR5cGVkZWYgYm9vbCAoR3JpZFRyYWNrU2l6ZTo6KiBGaWx0ZXJGdW5jdGlvbikoKSBj
b25zdDsKLSAgICB2b2lkIHJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zv
ckl0ZW1zKFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBWZWN0b3I8R3JpZFRyYWNrPiYgY29sdW1uVHJh
Y2tzLCBWZWN0b3I8R3JpZFRyYWNrPiYgcm93VHJhY2tzLCBSZW5kZXJCb3gqLCBGaWx0ZXJGdW5j
dGlvbiwgU2l6aW5nRnVuY3Rpb24sIEFjY3VtdWxhdG9yR2V0dGVyLCBBY2N1bXVsYXRvckdyb3dG
dW5jdGlvbik7Ci0gICAgdm9pZCBkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3JpZFRy
YWNrKj4mLCBWZWN0b3I8R3JpZFRyYWNrKj4qIHRyYWNrc0Zvckdyb3d0aEFib3ZlTWF4QnJlYWR0
aCwgQWNjdW11bGF0b3JHZXR0ZXIsIEFjY3VtdWxhdG9yR3Jvd0Z1bmN0aW9uLCBMYXlvdXRVbml0
JiBhdmFpbGFibGVMb2dpY2FsU3BhY2UpOworICAgIHZvaWQgcmVzb2x2ZUNvbnRlbnRCYXNlZFRy
YWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoVHJhY2tTaXppbmdEaXJlY3Rpb24sIEdyaWRTaXpp
bmdEYXRhJiwgUmVuZGVyQm94KiwgRmlsdGVyRnVuY3Rpb24sIFNpemluZ0Z1bmN0aW9uLCBBY2N1
bXVsYXRvckdldHRlciwgQWNjdW11bGF0b3JHcm93RnVuY3Rpb24pOworICAgIHZvaWQgZGlzdHJp
YnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+JiwgVmVjdG9yPEdyaWRUcmFjayo+
KiB0cmFja3NGb3JHcm93dGhBYm92ZU1heEJyZWFkdGgsIEFjY3VtdWxhdG9yR2V0dGVyLCBBY2N1
bXVsYXRvckdyb3dGdW5jdGlvbiwgR3JpZFNpemluZ0RhdGEmLCBMYXlvdXRVbml0JiBhdmFpbGFi
bGVMb2dpY2FsU3BhY2UpOwogCiAgICAgZG91YmxlIGNvbXB1dGVOb3JtYWxpemVkRnJhY3Rpb25C
cmVhZHRoKFZlY3RvcjxHcmlkVHJhY2s+JiwgVHJhY2tTaXppbmdEaXJlY3Rpb24sIExheW91dFVu
aXQgYXZhaWxhYmxlTG9naWNhbFNwYWNlKSBjb25zdDsKIApAQCAtMTAyLDcgKzEwMyw3IEBAIHBy
aXZhdGU6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQ29udGVudEhlaWdodEZvckNoaWxkKFJlbmRl
ckJveCosIFZlY3RvcjxHcmlkVHJhY2s+Jik7CiAgICAgTGF5b3V0VW5pdCBtaW5Db250ZW50Rm9y
Q2hpbGQoUmVuZGVyQm94KiwgVHJhY2tTaXppbmdEaXJlY3Rpb24sIFZlY3RvcjxHcmlkVHJhY2s+
JiBjb2x1bW5UcmFja3MpOwogICAgIExheW91dFVuaXQgbWF4Q29udGVudEZvckNoaWxkKFJlbmRl
ckJveCosIFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBWZWN0b3I8R3JpZFRyYWNrPiYgY29sdW1uVHJh
Y2tzKTsKLSAgICBMYXlvdXRQb2ludCBmaW5kQ2hpbGRMb2dpY2FsUG9zaXRpb24oUmVuZGVyQm94
KiwgY29uc3QgVmVjdG9yPEdyaWRUcmFjaz4mIGNvbHVtblRyYWNrcywgY29uc3QgVmVjdG9yPEdy
aWRUcmFjaz4mIHJvd1RyYWNrcyk7CisgICAgTGF5b3V0UG9pbnQgZmluZENoaWxkTG9naWNhbFBv
c2l0aW9uKFJlbmRlckJveCosIGNvbnN0IEdyaWRTaXppbmdEYXRhJik7CiAgICAgR3JpZENvb3Jk
aW5hdGUgY2FjaGVkR3JpZENvb3JkaW5hdGUoY29uc3QgUmVuZGVyQm94KikgY29uc3Q7CiAKICAg
ICBHcmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24o
Y29uc3QgUmVuZGVyQm94KiwgVHJhY2tTaXppbmdEaXJlY3Rpb24sIHNpemVfdCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="240837"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>