<?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>205494</bug_id>
          
          <creation_ts>2019-12-20 04:19:24 -0800</creation_ts>
          <short_desc>[LFC][IFC] Refactor LineLayoutContext class</short_desc>
          <delta_ts>2019-12-20 05:44:07 -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>Layout and Rendering</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1600681</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-20 04:19:24 -0800</bug_when>
    <thetext>Move away from the uncommitted queue setup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600682</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-20 04:19:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/58109493&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600685</commentid>
    <comment_count>2</comment_count>
      <attachid>386202</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-12-20 04:42:51 -0800</bug_when>
    <thetext>Created attachment 386202
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600688</commentid>
    <comment_count>3</comment_count>
      <attachid>386202</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-20 04:49:34 -0800</bug_when>
    <thetext>Comment on attachment 386202
Patch

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

&gt; Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp:277
&gt; +        auto triailingRunIndex = breakingContext.partialTrailingContent-&gt;triailingRunIndex;

Spelling triailingRunIndex (both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600710</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-20 05:44:07 -0800</bug_when>
    <thetext>Committed r253815: &lt;https://trac.webkit.org/changeset/253815&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386202</attachid>
            <date>2019-12-20 04:42:51 -0800</date>
            <delta_ts>2019-12-20 04:49:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205494-20191220044250.patch</filename>
            <type>text/plain</type>
            <size>33345</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA4Y2E3ZjMxMjVhMGEz
YWQ5NTk1OGFmMWE5Zjg5ZTM5NzhmZGYyNC4uNDI1MjU2OWJkY2UzNDA5OWFmNzZmMGY5YzAwYTVk
ZjY0NWFmYjRjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE5LTEyLTIwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBSZWZhY3Rv
ciBMaW5lTGF5b3V0Q29udGV4dCBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NDk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81ODEwOTQ5
Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGlzIGluIHByZXBhcmF0aW9uIGZvciBiZWluZyBhYmxlIHRvIHByZS1zY2FuIHRoZSBp
bmxpbmUgY29udGVudCBmb3Igc29mdCB3cmFwIG9wcG9ydHVuaXRpZXMuCisKKyAgICAgICAgQ3Vy
cmVudGx5IHByb2Nlc3NpbmcgdGhlIGlubGluZSBjb250ZW50IG1lYW5zIHB1c2hpbmcgdGhlIGlu
bGluZSBpdGVtcyB0byBhbiB1bmNvbW1pdHRlZCBxdWV1ZSB1bnRpbCBhZnRlcgorICAgICAgICB3
ZSBmaW5kIGEgc29mdCB3cmFwIG9wcG9ydHVuaXR5IGFuZCB0aGVuIHdlIGFzayB0aGUgTGluZUJy
ZWFrZXIgd2hldGhlciB0aGlzIHVuY29tbWl0dGVkLCAiY29udGludW91cyBjb250ZW50IiBjYW4g
YmUgcGxhY2VkCisgICAgICAgIG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAgIHdoaWxlICho
YXMgdW5wcm9jZXNzZWQgaW5saW5lIGl0ZW0pIHsKKyAgICAgICAgICAgIGdldCBuZXh0IGlubGlu
ZSBpdGVtCisgICAgICAgICAgICBpZiAoaW5saW5lIGl0ZW0gaXMgYXQgYSBzb2Z0IHdyYXAgb3Bw
b3J0dW5pdHkpCisgICAgICAgICAgICAgICAgc3VtYml0IHVuY29tbWl0dGVkIHF1ZXVlIHRvIGxp
bmUgYnJlYWtpbmcKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGQgdG8gdW5j
b21taXR0ZWQgcXVldWUKKyAgICAgICAgfQorICAgICAgICBUaGlzIHBhdGNoIG9taXRzIHRoZSB1
bmNvbW1pdHRlZCBxdWV1ZSBieSBjb2xsZWN0aW5nIHRoZSBpbmxpbmUgaXRlbXMgZmlyc3QuIFRo
aXMgcmVtb3ZlcyBzb21lIGNvZGUgY29tcGxleGl0eSBhbmQgaXQgYWxzbworICAgICAgICBoZWxw
cyB0byBiZSBhYmxlIHRvIHByZS1zY2FuIHRoZSBjb250ZW50IGZvciBzb2Z0IHdyYXAgb3Bwb3J0
dW5pdGllcy4KKyAgICAgICAgd2hpbGUgKGhhcyB1bnByb2Nlc3NlZCBpbmxpbmUgaXRlbSkgewor
ICAgICAgICAgICAgZ2V0IG5leHQgY29udGludW91cyBjb250ZW50CisgICAgICAgICAgICBzdWJt
aXQgY29udGVudCB0byBsaW5lIGJyZWFraW5nCisgICAgICAgIH0KKworICAgICAgICAqIGxheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6ZW5kc1dpdGhTb2Z0V3JhcE9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6OkNvbnRpbm91c0NvbnRl
bnQpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2Vy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjpSdW46OlJ1bik6Cisg
ICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb250aW5vdXNDb250ZW50OjpoYXNJbnRydXNpdmVG
bG9hdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb250aW5vdXNDb250ZW50
OjpydW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Q29udGlub3VzQ29udGVu
dDo6ZmxvYXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Q29udGlub3VzQ29u
dGVudDo6ZW5kc1dpdGhMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpDb250aW5vdXNDb250ZW50OjpzZXRFbmRzV2l0aExpbmVCcmVhayk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkNvbnRpbm91c0NvbnRlbnQ6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpsYXlvdXRMaW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUxheW91dENvbnRleHQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUxheW91dENvbnRleHQ6Om5leHRDb250aW5vdXNDb250ZW50Rm9yTGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjphZGRGbG9hdEl0
ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dENvbnRleHQ6OnBsYWNl
SW5saW5lQ29udGVudE9uQ3VycmVudExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lTGF5b3V0Q29udGV4dDo6Y29tbWl0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVMYXlvdXRDb250ZXh0Ojpjb21taXRQZW5kaW5nQ29udGVudCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpwbGFjZUlubGluZUl0
ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4
dDo6cHJvY2Vzc1VuY29tbWl0dGVkQ29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OmFwcGVuZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpV
bmNvbW1pdHRlZENvbnRlbnQ6OnJlc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUxheW91dENvbnRleHQ6OlVuY29tbWl0dGVkQ29udGVudDo6c2hyaW5rKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4
dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6Zm9ybWF0
dGluZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0
Q29udGV4dDo6cm9vdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlv
dXRDb250ZXh0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OndpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dENvbnRleHQ6OlVuY29tbWl0dGVkQ29u
dGVudDo6c2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlv
dXRDb250ZXh0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OmlzRW1wdHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6VW5jb21taXR0ZWRDb250ZW50
OjpydW5zIGNvbnN0KTogRGVsZXRlZC4KKwogMjAxOS0xMi0xOCAgRXJpYyBDYXJsc29uICA8ZXJp
Yy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgbW9yZSB1bnVzZWQgTWVkaWFQ
bGF5ZXIgbWV0aG9kcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCmluZGV4IGQ3OGVjNjIwMGI2ZTFi
M2E0MmJmNzczMGY4NjhhNTNiNmYzYmFlNzcuLjM4OWIxM2IyMDY4MzA1ODkxOTBjNzdkNTI1ODRk
OGM4ZDYzYTc3ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKQEAgLTI1NSw3ICsyNTUsNiBA
QCBPcHRpb25hbDxMaW5lQnJlYWtlcjo6UGFydGlhbFJ1bj4gTGluZUJyZWFrZXI6OnRyeUJyZWFr
aW5nVGV4dFJ1bihjb25zdCBSdW4mIG92ZQogCiBzdGF0aWMgYm9vbCBlbmRzV2l0aFNvZnRXcmFw
T3Bwb3J0dW5pdHkoY29uc3QgSW5saW5lVGV4dEl0ZW0mIHByZXZpb3VzVGV4dEl0ZW0sIGNvbnN0
IElubGluZVRleHRJdGVtJiBuZXh0SW5saW5lVGV4dEl0ZW0pCiB7Ci0gICAgQVNTRVJUKCFwcmV2
aW91c1RleHRJdGVtLmlzV2hpdGVzcGFjZSgpKTsKICAgICBBU1NFUlQoIW5leHRJbmxpbmVUZXh0
SXRlbS5pc1doaXRlc3BhY2UoKSk7CiAgICAgLy8gV2hlbiBib3RoIHRoZXNlIG5vbi13aGl0ZXNw
YWNlIHJ1bnMgYmVsb25nIHRvIHRoZSBzYW1lIGxheW91dCBib3gsIGl0J3MgZ3VhcmFudGVlZCB0
aGF0CiAgICAgLy8gdGhleSBhcmUgc3BsaXQgYXQgYSBzb2Z0IGJyZWFraW5nIG9wcG9ydHVuaXR5
LiBTZWUgSW5saW5lVGV4dEl0ZW06Om1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbi4KQEAgLTQx
NSw2ICs0MTQsMTAgQEAgTGluZUJyZWFrZXI6OkNvbnRpbm91c0NvbnRlbnQ6OkNvbnRpbm91c0Nv
bnRlbnQoY29uc3QgUnVuTGlzdCYgcnVucykKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgfQorICAgIC8vIFRoZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGxvb3AgYWJvdmUgaXMgbW9z
dGx5IGFib3V0IGluc3BlY3RpbmcgdGhlIGxhc3QgZW50cnksIHNvIHdoaWxlIGl0CisgICAgLy8g
bG9va3MgbGlrZSB3ZSBhcmUgbG9vcGluZyB0aHJvdWdoIHRoZSBtX3J1bnMgdHdpY2UsIGl0J3Mg
cmVhbGx5IGp1c3Qgb25lIGZ1bGwgbG9vcCBpbiBhZGRpdGlvbiB0byBjaGVja2luZyB0aGUgbGFz
dCBydW4uCisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpCisgICAgICAgIG1fd2lkdGggKz0g
cnVuLmxvZ2ljYWxXaWR0aDsKIH0KIAogYm9vbCBMaW5lQnJlYWtlcjo6Q29udGlub3VzQ29udGVu
dDo6aGFzVGV4dENvbnRlbnRPbmx5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCmluZGV4IGEx
YWUyMmZlOTgzYTUwYzhhNmQ4MTIyNzgxMTY2MzRiNWM0NjdiOWIuLjdkZGNmMDZmYzU1MmU2Mzc3
NGE0MjY4ZDk3NmJiNGJjODdjNDU4YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaApAQCAtNTEsMTIg
KzUxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgQ29udGVudFdyYXBwaW5nUnVsZSBjb250ZW50V3Jh
cHBpbmdSdWxlOwogICAgICAgICBzdHJ1Y3QgUGFydGlhbFRyYWlsaW5nQ29udGVudCB7CiAgICAg
ICAgICAgICB1bnNpZ25lZCB0cmlhaWxpbmdSdW5JbmRleCB7IDAgfTsKLSAgICAgICAgICAgIE9w
dGlvbmFsPFBhcnRpYWxSdW4+IHBhcnRpYWxSdW47IC8vIEVtcHR5IHBhcnRpYWwgcnVuIG1lYW5z
IHRoZSB0cmFpbGluZyBydW4gaXMgYSBjb21wbGV0ZSBydW4uCisgICAgICAgICAgICBPcHRpb25h
bDxQYXJ0aWFsUnVuPiBwYXJ0aWFsUnVuOyAvLyBudWxsb3B0IHBhcnRpYWwgcnVuIG1lYW5zIHRo
ZSB0cmFpbGluZyBydW4gaXMgYSBjb21wbGV0ZSBydW4uCiAgICAgICAgIH07CiAgICAgICAgIE9w
dGlvbmFsPFBhcnRpYWxUcmFpbGluZ0NvbnRlbnQ+IHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQ7CiAg
ICAgfTsKIAogICAgIHN0cnVjdCBSdW4geworICAgICAgICBSdW4oY29uc3QgSW5saW5lSXRlbSYs
IElubGluZUxheW91dFVuaXQpOworICAgICAgICBSdW4oY29uc3QgUnVuJik7CisgICAgICAgIFJ1
biYgb3BlcmF0b3I9KGNvbnN0IFJ1biYpOworCiAgICAgICAgIGNvbnN0IElubGluZUl0ZW0mIGlu
bGluZUl0ZW07CiAgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoIHsgMCB9Owog
ICAgIH07CkBAIC0xMzEsNiArMTM1LDE4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBuX2h5cGhlbmF0
aW9uSXNEaXNhYmxlZCB7IGZhbHNlIH07CiB9OwogCitpbmxpbmUgTGluZUJyZWFrZXI6OlJ1bjo6
UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNh
bFdpZHRoKQorICAgIDogaW5saW5lSXRlbShpbmxpbmVJdGVtKQorICAgICwgbG9naWNhbFdpZHRo
KGxvZ2ljYWxXaWR0aCkKK3sKK30KKworaW5saW5lIExpbmVCcmVha2VyOjpSdW46OlJ1bihjb25z
dCBSdW4mIG90aGVyKQorICAgIDogaW5saW5lSXRlbShvdGhlci5pbmxpbmVJdGVtKQorICAgICwg
bG9naWNhbFdpZHRoKG90aGVyLmxvZ2ljYWxXaWR0aCkKK3sKK30KKwogfQogfQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5
b3V0Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9M
aW5lTGF5b3V0Q29udGV4dC5jcHAKaW5kZXggYmI3NmQ3NWVmYTI5OGMxNDAyMjkwNmI3N2E4OGJk
ZThiZDUwODc0Mi4uZmU3ZTQ3MjI5NDYyMTIzM2ZjZWMzMTExNjNhNDBjODk2NjNkNGJjOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91
dENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0xpbmVMYXlvdXRDb250ZXh0LmNwcApAQCAtMjgsMTMgKzI4LDM1IEBACiAKICNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAotI2luY2x1ZGUgIklubGluZUxpbmVCcmVha2Vy
LmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCiAjaW5jbHVkZSAiVGV4dFV0aWwuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKK3N0cnVjdCBDb250aW5vdXND
b250ZW50IHsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBJbmxpbmVJdGVtJiwgT3B0aW9uYWw8SW5s
aW5lTGF5b3V0VW5pdD4gbG9naWNhbFdpZHRoKTsKKworICAgIGJvb2wgaGFzSW50cnVzaXZlRmxv
YXRzKCkgY29uc3QgeyByZXR1cm4gIW1fZmxvYXRzLmlzRW1wdHkoKTsgfQorICAgIGNvbnN0IExp
bmVCcmVha2VyOjpSdW5MaXN0JiBydW5zKCkgY29uc3QgeyByZXR1cm4gbV9ydW5zOyB9CisgICAg
Y29uc3QgTGluZUxheW91dENvbnRleHQ6OkZsb2F0TGlzdCYgZmxvYXRzKCkgY29uc3QgeyByZXR1
cm4gbV9mbG9hdHM7IH0KKworICAgIGJvb2wgZW5kc1dpdGhMaW5lQnJlYWsoKSBjb25zdCB7IHJl
dHVybiBtX2VuZHNXaXRoTGluZUJyZWFrOyB9CisgICAgdm9pZCBzZXRFbmRzV2l0aExpbmVCcmVh
aygpIHsgbV9lbmRzV2l0aExpbmVCcmVhayA9IHRydWU7IH0KKworcHJpdmF0ZToKKyAgICBMaW5l
QnJlYWtlcjo6UnVuTGlzdCBtX3J1bnM7CisgICAgTGluZUxheW91dENvbnRleHQ6OkZsb2F0TGlz
dCBtX2Zsb2F0czsKKyAgICBib29sIG1fZW5kc1dpdGhMaW5lQnJlYWsgeyBmYWxzZSB9OworfTsK
Kwordm9pZCBDb250aW5vdXNDb250ZW50OjphcHBlbmQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5l
SXRlbSwgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gbG9naWNhbFdpZHRoKQoreworICAgIGlm
IChpbmxpbmVJdGVtLmlzRmxvYXQoKSkKKyAgICAgICAgcmV0dXJuIG1fZmxvYXRzLmFwcGVuZCht
YWtlV2Vha1B0cihpbmxpbmVJdGVtKSk7CisgICAgbV9ydW5zLmFwcGVuZCh7IGlubGluZUl0ZW0s
ICpsb2dpY2FsV2lkdGggfSk7Cit9CisKIHN0YXRpYyBJbmxpbmVMYXlvdXRVbml0IGlubGluZUl0
ZW1XaWR0aChjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0
IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxM
ZWZ0KQogewogICAgIGlmIChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkpCkBAIC03Niw2MiArOTgs
NzMgQEAgTGluZUxheW91dENvbnRleHQ6OkxpbmVMYXlvdXRDb250ZXh0KGNvbnN0IElubGluZUZv
cm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXQKIAogTGluZUxheW91dENvbnRleHQ6OkxpbmVD
b250ZW50IExpbmVMYXlvdXRDb250ZXh0OjpsYXlvdXRMaW5lKExpbmVCdWlsZGVyJiBsaW5lLCB1
bnNpZ25lZCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCBPcHRpb25hbDx1bnNpZ25lZD4gcGFydGlh
bExlYWRpbmdDb250ZW50TGVuZ3RoKQogewotICAgIGF1dG8gaW5pdGlhbGl6ZSA9IFsmXSB7Ci0g
ICAgICAgIG1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50ID0gMDsKLSAgICAgICAgbV91bmNvbW1p
dHRlZENvbnRlbnQucmVzZXQoKTsKLSAgICAgICAgbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtID0g
eyB9OworICAgIGF1dG8gcmVzZXQgPSBbJl0geworICAgICAgICBBU1NFUlQobV9mbG9hdHMuaXNF
bXB0eSgpKTsKICAgICAgICAgbV9wYXJ0aWFsVHJhaWxpbmdUZXh0SXRlbSA9IHsgfTsKLSAgICAg
ICAgbV9wYXJ0aWFsQ29udGVudCA9IHsgfTsKKyAgICAgICAgbV9wYXJ0aWFsTGVhZGluZ1RleHRJ
dGVtID0geyB9OwogICAgIH07Ci0gICAgaW5pdGlhbGl6ZSgpOwotICAgIC8vIEl0ZXJhdGUgdGhy
b3VnaCB0aGUgaW5saW5lIGNvbnRlbnQgYW5kIHBsYWNlIHRoZSBpbmxpbmUgYm94ZXMgb24gdGhl
IGN1cnJlbnQgbGluZS4KLSAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJ0aWFsIGxlYWRpbmcgdGV4
dCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lLgotICAgIGF1dG8gZmlyc3ROb25QYXJ0aWFsSW5saW5l
SXRlbUluZGV4ID0gbGVhZGluZ0lubGluZUl0ZW1JbmRleDsKLSAgICBpZiAocGFydGlhbExlYWRp
bmdDb250ZW50TGVuZ3RoKSB7Ci0gICAgICAgIC8vIEhhbmRsZSBwYXJ0aWFsIGlubGluZSBpdGVt
IChzcGxpdCB0ZXh0IGZyb20gdGhlIHByZXZpb3VzIGxpbmUpLgotICAgICAgICBhdXRvJiBsZWFk
aW5nVGV4dEl0ZW0gPSBtX2lubGluZUl0ZW1zW2xlYWRpbmdJbmxpbmVJdGVtSW5kZXhdOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChsZWFkaW5nVGV4dEl0ZW0tPmlzVGV4dCgpKTsKLSAgICAgICAg
Ly8gQ29uc3RydWN0IGEgcGFydGlhbCBsZWFkaW5nIGlubGluZSBpdGVtLgotICAgICAgICBBU1NF
UlQoIW1fcGFydGlhbExlYWRpbmdUZXh0SXRlbSk7Ci0gICAgICAgIG1fcGFydGlhbExlYWRpbmdU
ZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPigqbGVhZGluZ1RleHRJdGVtKS5yaWdo
dCgqcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKLSAgICAgICAgaWYgKHBsYWNlSW5saW5l
SXRlbShsaW5lLCAqbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtKSA9PSBJc0VuZE9mTGluZTo6WWVz
KQotICAgICAgICAgICAgcmV0dXJuIGNsb3NlKGxpbmUsIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgp
OwotICAgICAgICArK2ZpcnN0Tm9uUGFydGlhbElubGluZUl0ZW1JbmRleDsKLSAgICB9Ci0KLSAg
ICBmb3IgKGF1dG8gaW5saW5lSXRlbUluZGV4ID0gZmlyc3ROb25QYXJ0aWFsSW5saW5lSXRlbUlu
ZGV4OyBpbmxpbmVJdGVtSW5kZXggPCBtX2lubGluZUl0ZW1zLnNpemUoKTsgKytpbmxpbmVJdGVt
SW5kZXgpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0byByZS1tZWFz
dXJlIHRoZSBkcm9wcGVkLCB1bmNvbW1pdHRlZCBjb250ZW50IHdoZW4gcmUtdXNpbmcgdGhlbSBv
biB0aGUgbmV4dCBsaW5lLgotICAgICAgICBpZiAocGxhY2VJbmxpbmVJdGVtKGxpbmUsICptX2lu
bGluZUl0ZW1zW2lubGluZUl0ZW1JbmRleF0pID09IElzRW5kT2ZMaW5lOjpZZXMpCi0gICAgICAg
ICAgICByZXR1cm4gY2xvc2UobGluZSwgbGVhZGluZ0lubGluZUl0ZW1JbmRleCk7CisgICAgcmVz
ZXQoKTsKKyAgICBhdXRvIGN1cnJlbnRJdGVtSW5kZXggPSBsZWFkaW5nSW5saW5lSXRlbUluZGV4
OworICAgIHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCA9IDA7CisgICAgd2hpbGUg
KGN1cnJlbnRJdGVtSW5kZXggPCBtX2lubGluZUl0ZW1zLnNpemUoKSkgeworICAgICAgICAvLyAx
LiBDb2xsZWN0IHRoZSBzZXQgb2YgcnVucyB0aGF0IHdlIGNhbiBjb21taXQgdG8gdGhlIGxpbmUg
YXMgb25lIGVudGl0eSBlLmcuIDxzcGFuPnRleHRfYW5kX3NwYW5fc3RhcnRfc3Bhbl9lbmQ8L3Nw
YW4+LgorICAgICAgICAvLyAyLiBBcHBseSBmbG9hdHMgYW5kIHNocmluayB0aGUgYXZhaWxhYmxl
IGhvcml6b250YWwgc3BhY2UgZS5nLiA8c3Bhbj5pbnRydV88ZGl2IHN0eWxlPSJmbG9hdDogbGVm
dCI+PC9kaXY+c2l2ZV9mbG9hdDwvc3Bhbj4uCisgICAgICAgIC8vIDMuIENoZWNrIGlmIHRoZSBj
b250ZW50IGZpdHMgdGhlIGxpbmUgYW5kIGNvbW1pdCB0aGUgY29udGVudCBhY2NvcmRpbmdseSAo
ZnVsbCwgcGFydGlhbCBvciBub3QgY29tbWl0IGF0IGFsbCkuCisgICAgICAgIC8vIDQuIFJldHVy
biBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBlaXRoZXIgYnkgbm90IGJlaW5nIGFi
bGUgdG8gZml0IG1vcmUgY29udGVudCBvciBiZWNhdXNlIG9mIGFuIGV4cGxpY2l0IGxpbmUgYnJl
YWsuCisgICAgICAgIGF1dG8gY2FuZGlkYXRlQ29udGVudCA9IG5leHRDb250aW5vdXNDb250ZW50
Rm9yTGluZShjdXJyZW50SXRlbUluZGV4LCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgsIGxp
bmUubGluZUJveCgpLmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZUNvbnRl
bnQuaGFzSW50cnVzaXZlRmxvYXRzKCkpIHsKKyAgICAgICAgICAgIC8vIEFkZCBmbG9hdHMgZmly
c3QgYmVjYXVzZSB0aGV5IHNocmluayB0aGUgYXZhaWxhYmxlIGhvcml6b250YWwgc3BhY2UgZm9y
IHRoZSByZXN0IG9mIHRoZSBjb250ZW50LgorICAgICAgICAgICAgYXV0byBmbG9hdENvbnRlbnQg
PSBhZGRGbG9hdEl0ZW1zKGxpbmUsIGNhbmRpZGF0ZUNvbnRlbnQuZmxvYXRzKCkpOworICAgICAg
ICAgICAgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50ICs9IGZsb2F0Q29udGVudC5jb3VudDsKKyAg
ICAgICAgICAgIGlmIChmbG9hdENvbnRlbnQuaXNFbmRPZkxpbmUgPT0gSXNFbmRPZkxpbmU6Olll
cykgeworICAgICAgICAgICAgICAgIC8vIEZsb2F0cyB0YWtlIHVwIGFsbCB0aGUgaG9yaXpvbnRh
bCBzcGFjZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2UobGluZSwgbGVhZGluZ0lubGlu
ZUl0ZW1JbmRleCwgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCB7IH0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIEFTU0VSVCghY2FuZGlkYXRlQ29udGVudC5ydW5zKCkuaXNF
bXB0eSgpIHx8IGNhbmRpZGF0ZUNvbnRlbnQuZW5kc1dpdGhMaW5lQnJlYWsoKSB8fCBjYW5kaWRh
dGVDb250ZW50Lmhhc0ludHJ1c2l2ZUZsb2F0cygpKTsKKyAgICAgICAgaWYgKCFjYW5kaWRhdGVD
b250ZW50LnJ1bnMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIE5vdyBjaGVjayBpZiB3
ZSBjYW4gcHV0IHRoaXMgY29udGVudCBvbiB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICAgICAg
YXV0byBjb21taXR0ZWRDb250ZW50ID0gcGxhY2VJbmxpbmVDb250ZW50T25DdXJyZW50TGluZShs
aW5lLCBjYW5kaWRhdGVDb250ZW50LnJ1bnMoKSk7CisgICAgICAgICAgICBjb21taXR0ZWRJbmxp
bmVJdGVtQ291bnQgKz0gY29tbWl0dGVkQ29udGVudC5jb3VudDsKKyAgICAgICAgICAgIGlmIChj
b21taXR0ZWRDb250ZW50LmlzRW5kT2ZMaW5lID09IElzRW5kT2ZMaW5lOjpZZXMpIHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBjYW4ndCBwbGFjZSBhbnkgbW9yZSBpdGVtcyBvbiB0aGUgY3VycmVu
dCBsaW5lLgorICAgICAgICAgICAgICAgIHJldHVybiBjbG9zZShsaW5lLCBsZWFkaW5nSW5saW5l
SXRlbUluZGV4LCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIGNvbW1pdHRlZENvbnRlbnQucGFy
dGlhbENvbnRlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFdlIGNv
dWxkIGZpdCBtb3JlIGNvbnRlbnQgYnV0IHNhZGx5IHRoaXMgbGluZSBlbmRzIHdpdGggYW4gZXhw
bGljaXQgbGluZSBicmVhay4KKyAgICAgICAgaWYgKGNhbmRpZGF0ZUNvbnRlbnQuZW5kc1dpdGhM
aW5lQnJlYWsoKSkgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSB0cmFpbGluZyBsaW5l
IGJyZWFrIGVuZHMgdXAgb24gdGhlIGxpbmUgdG9vLgorICAgICAgICAgICAgYXV0byBsaW5lQnJl
YWtJbmRleCA9IGxlYWRpbmdJbmxpbmVJdGVtSW5kZXggKyBjb21taXR0ZWRJbmxpbmVJdGVtQ291
bnQ7CisgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVJdGVtc1tsaW5lQnJlYWtJbmRleF0tPmlz
TGluZUJyZWFrKCkpOworICAgICAgICAgICAgbGluZS5hcHBlbmQoKm1faW5saW5lSXRlbXNbbGlu
ZUJyZWFrSW5kZXhdLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBjbG9zZShsaW5lLCBsZWFkaW5n
SW5saW5lSXRlbUluZGV4LCArK2NvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgeyB9KTsKKyAgICAg
ICAgfQorICAgICAgICBjdXJyZW50SXRlbUluZGV4ID0gbGVhZGluZ0lubGluZUl0ZW1JbmRleCAr
IGNvbW1pdHRlZElubGluZUl0ZW1Db3VudDsKKyAgICAgICAgcGFydGlhbExlYWRpbmdDb250ZW50
TGVuZ3RoID0geyB9OwogICAgIH0KLSAgICAvLyBDaGVjayB0aGUgdW5jb21taXR0ZWQgY29udGVu
dCB3aGV0aGVyIHRoZXkgZml0IG5vdyB0aGF0IHdlIGtub3cgd2UgYXJlIGF0IGEgY29tbWl0IGJv
dW5kYXJ5LgotICAgIGlmICghbV91bmNvbW1pdHRlZENvbnRlbnQuaXNFbXB0eSgpKQotICAgICAg
ICBwcm9jZXNzVW5jb21taXR0ZWRDb250ZW50KGxpbmUpOwotICAgIHJldHVybiBjbG9zZShsaW5l
LCBsZWFkaW5nSW5saW5lSXRlbUluZGV4KTsKLX0KLQotdm9pZCBMaW5lTGF5b3V0Q29udGV4dDo6
Y29tbWl0UGVuZGluZ0NvbnRlbnQoTGluZUJ1aWxkZXImIGxpbmUpCi17Ci0gICAgaWYgKG1fdW5j
b21taXR0ZWRDb250ZW50LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29tbWl0
dGVkSW5saW5lSXRlbUNvdW50ICs9IG1fdW5jb21taXR0ZWRDb250ZW50LnNpemUoKTsKLSAgICBm
b3IgKGF1dG8mIHVuY29tbWl0dGVkUnVuIDogbV91bmNvbW1pdHRlZENvbnRlbnQucnVucygpKQot
ICAgICAgICBsaW5lLmFwcGVuZCh1bmNvbW1pdHRlZFJ1bi5pbmxpbmVJdGVtLCB1bmNvbW1pdHRl
ZFJ1bi5sb2dpY2FsV2lkdGgpOwotICAgIG1fdW5jb21taXR0ZWRDb250ZW50LnJlc2V0KCk7Cisg
ICAgLy8gTG9va3MgbGlrZSB3ZSd2ZSBydW4gb3V0IG9mIHJ1bnMuCisgICAgcmV0dXJuIGNsb3Nl
KGxpbmUsIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgsIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwg
eyB9KTsKIH0KIAotTGluZUxheW91dENvbnRleHQ6OkxpbmVDb250ZW50IExpbmVMYXlvdXRDb250
ZXh0OjpjbG9zZShMaW5lQnVpbGRlciYgbGluZSwgdW5zaWduZWQgbGVhZGluZ0lubGluZUl0ZW1J
bmRleCkKK0xpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6
Y2xvc2UoTGluZUJ1aWxkZXImIGxpbmUsIHVuc2lnbmVkIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgs
IHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGluZUNvbnRlbnQ6
OlBhcnRpYWxDb250ZW50PiBwYXJ0aWFsQ29udGVudCkKIHsKLSAgICBBU1NFUlQobV9jb21taXR0
ZWRJbmxpbmVJdGVtQ291bnQgfHwgbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpKTsKLSAgICBtX3Vu
Y29tbWl0dGVkQ29udGVudC5yZXNldCgpOwotICAgIGlmICghbV9jb21taXR0ZWRJbmxpbmVJdGVt
Q291bnQpCisgICAgQVNTRVJUKGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCB8fCBsaW5lLmhhc0lu
dHJ1c2l2ZUZsb2F0KCkpOworICAgIGlmICghY29tbWl0dGVkSW5saW5lSXRlbUNvdW50KQogICAg
ICAgICByZXR1cm4gTGluZUNvbnRlbnQgeyB7IH0sIHsgfSwgV1RGTW92ZShtX2Zsb2F0cyksIGxp
bmUuY2xvc2UoKSwgbGluZS5saW5lQm94KCkgfTsKIAotICAgIGF1dG8gdHJhaWxpbmdJbmxpbmVJ
dGVtSW5kZXggPSBsZWFkaW5nSW5saW5lSXRlbUluZGV4ICsgbV9jb21taXR0ZWRJbmxpbmVJdGVt
Q291bnQgLSAxOworICAgIC8vIEFkanVzdCBoeXBoZW5hdGVkIGxpbmUgY291bnQuCisgICAgaWYg
KHBhcnRpYWxDb250ZW50ICYmIHBhcnRpYWxDb250ZW50LT50cmFpbGluZ0NvbnRlbnROZWVkc0h5
cGhlbikKKyAgICAgICAgKyttX3N1Y2Nlc3NpdmVIeXBoZW5hdGVkTGluZUNvdW50OworICAgIGVs
c2UKKyAgICAgICAgbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA9IDA7CisKKyAgICBh
dXRvIHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ID0gbGVhZGluZ0lubGluZUl0ZW1JbmRleCArIGNv
bW1pdHRlZElubGluZUl0ZW1Db3VudCAtIDE7CiAgICAgYXV0byBpc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQgPSBbJl0gewotICAgICAgICBpZiAobV9wYXJ0aWFsQ29udGVudCkKKyAgICAgICAg
aWYgKHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ID09IG1faW5saW5lSXRlbXMuc2l6ZSgpIC0gMSkK
KyAgICAgICAgICAgIHJldHVybiBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50OjpZZXM7CisgICAgICAgIGlmIChwYXJ0aWFsQ29udGVudCkKICAgICAgICAgICAgIHJldHVy
biBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKLSAgICAgICAg
Ly8gU2tpcCBmbG9hdHMgYmFja3dhcmRzIHRvIHNlZSBpZiB0aGlzIGlzIGdvaW5nIHRvIGJlIHRo
ZSBsYXN0IGxpbmUgd2l0aCBpbmxpbmUgY29udGVudC4KKyAgICAgICAgLy8gT21pdCBmbG9hdHMg
dG8gc2VlIGlmIHRoaXMgaXMgdGhlIGxhc3QgbGluZSB3aXRoIGlubGluZSBjb250ZW50LgogICAg
ICAgICBmb3IgKGF1dG8gaSA9IG1faW5saW5lSXRlbXMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAg
ICAgICBpZiAoIW1faW5saW5lSXRlbXNbaV0tPmlzRmxvYXQoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gaSA9PSB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCA/IExpbmVCdWlsZGVyOjpJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQ6Ok5vOwpAQCAtMTM5LDEzNiArMTcyLDE0MyBAQCBMaW5lTGF5b3V0Q29udGV4
dDo6TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmNsb3NlKExpbmVCdWlsZGVyJiBsaW5l
LCB1bnNpZwogICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25lIG5vbi1mbG9h
dCBpdGVtLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIExp
bmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOwotICAgIH07Ci0KLSAg
ICByZXR1cm4gTGluZUNvbnRlbnQgeyB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCwgbV9wYXJ0aWFs
Q29udGVudCwgV1RGTW92ZShtX2Zsb2F0cyksIGxpbmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50KCkpLCBsaW5lLmxpbmVCb3goKSB9OworICAgIH0oKTsKKyAgICByZXR1cm4gTGlu
ZUNvbnRlbnQgeyB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCwgcGFydGlhbENvbnRlbnQsIFdURk1v
dmUobV9mbG9hdHMpLCBsaW5lLmNsb3NlKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCksIGxp
bmUubGluZUJveCgpIH07CiB9CiAKLUxpbmVMYXlvdXRDb250ZXh0OjpJc0VuZE9mTGluZSBMaW5l
TGF5b3V0Q29udGV4dDo6cGxhY2VJbmxpbmVJdGVtKExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdCBJ
bmxpbmVJdGVtJiBpbmxpbmVJdGVtKQorQ29udGlub3VzQ29udGVudCBMaW5lTGF5b3V0Q29udGV4
dDo6bmV4dENvbnRpbm91c0NvbnRlbnRGb3JMaW5lKHVuc2lnbmVkIGlubGluZUl0ZW1JbmRleCwg
T3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgSW5saW5lTGF5
b3V0VW5pdCBjdXJyZW50TG9naWNhbFJpZ2h0KQogewotICAgIGF1dG8gY3VycmVudExvZ2ljYWxS
aWdodCA9IGxpbmUubGluZUJveCgpLmxvZ2ljYWxXaWR0aCgpICsgbV91bmNvbW1pdHRlZENvbnRl
bnQud2lkdGgoKTsKLSAgICBhdXRvIGl0ZW1Mb2dpY2FsV2lkdGggPSBpbmxpbmVJdGVtV2lkdGgo
Zm9ybWF0dGluZ0NvbnRleHQoKSwgaW5saW5lSXRlbSwgY3VycmVudExvZ2ljYWxSaWdodCk7Ci0K
LSAgICAvLyBGbG9hdHMgYXJlIHNwZWNpYWwsIHRoZXkgYXJlIGludHJ1c2l2ZSBidXQgdGhleSBk
b24ndCByZWFsbHkgcGFydGljaXBhdGUgaW4gdGhlIGxpbmUgbGF5b3V0IGNvbnRleHQuCi0gICAg
aWYgKGlubGluZUl0ZW0uaXNGbG9hdCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCBnZXRzIGEg
Yml0IG1vcmUgY29tcGxpY2F0ZWQgd2hlbiB0aGVyZSdzIHNvbWUgdW5jb21taXR0ZWQgY29udGVu
dCB3aGV0aGVyIHRoZXkgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IGxpbmUKLSAgICAg
ICAgLy8gZS5nLiB0ZXh0X2NvbnRlbnQ8ZGl2IHN0eWxlPSJmbG9hdDogbGVmdCI+PC9kaXY+Y29u
dGludW91c190ZXh0X2NvbnRlbnQKLSAgICAgICAgLy8gTm90IHN1cmUgd2hhdCB0byBkbyB3aGVu
IHRoZSBmbG9hdCB0YWtlcyB1cCB0aGUgYXZhaWxhYmxlIHNwYWNlIGFuZCB3ZSd2ZSBnb3QgY29u
dGludW91cyBjb250ZW50LiBCcm93c2VyIGVuZ2luZXMgZG9uJ3QgYWdyZWUuCi0gICAgICAgIC8v
IExldCdzIGp1c3QgY29tbWl0IHRoZSBwZW5kaW5nIGNvbnRlbnQgYW5kIHRyeSBwbGFjaW5nIHRo
ZSBmbG9hdCBmb3Igbm93LgotICAgICAgICBpZiAoIW1fdW5jb21taXR0ZWRDb250ZW50LmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgaWYgKHByb2Nlc3NVbmNvbW1pdHRlZENvbnRlbnQobGluZSkg
PT0gSXNFbmRPZkxpbmU6OlllcykKLSAgICAgICAgICAgICAgICByZXR1cm4gSXNFbmRPZkxpbmU6
OlllczsKKyAgICBhdXRvIGNhbmRpZGF0ZUNvbnRlbnQgPSBDb250aW5vdXNDb250ZW50IHsgfTsK
KyAgICAvLyAxLiBTaW1wbHkgYWRkIGFueSBvdmVyZmxvdyBjb250ZW50IGZyb20gdGhlIHByZXZp
b3VzIGxpbmUgdG8gdGhlIGNhbmRpZGF0ZSBjb250ZW50LiBJdCdzIGFsd2F5cyBhIHRleHQgY29u
dGVudC4KKyAgICAvLyAyLiBGaW5kIHRoZSBuZXh0IHNvZnQgd3JhcCBwb3NpdGlvbiBvciBleHBs
aWNpdCBsaW5lIGJyZWFrLgorICAgIC8vIDMuIENvbGxlY3QgZmxvYXRzIGJldHdlZW4gdGhlIGlu
bGluZSBjb250ZW50LgorICAgIGlmIChwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpIHsKKyAg
ICAgICAgLy8gSGFuZGxlIGxlYWRpbmcgcGFydGlhbCBjb250ZW50IGZpcnN0IChzcGxpdCB0ZXh0
IGZyb20gdGhlIHByZXZpb3VzIGxpbmUpLgorICAgICAgICAvLyBDb25zdHJ1Y3QgYSBwYXJ0aWFs
IGxlYWRpbmcgaW5saW5lIGl0ZW0uCisgICAgICAgIG1fcGFydGlhbExlYWRpbmdUZXh0SXRlbSA9
IGRvd25jYXN0PElubGluZVRleHRJdGVtPigqbV9pbmxpbmVJdGVtc1tpbmxpbmVJdGVtSW5kZXhd
KS5yaWdodCgqcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKKyAgICAgICAgYXV0byBpdGVt
V2lkdGggPSBpbmxpbmVJdGVtV2lkdGgoZm9ybWF0dGluZ0NvbnRleHQoKSwgKm1fcGFydGlhbExl
YWRpbmdUZXh0SXRlbSwgY3VycmVudExvZ2ljYWxSaWdodCk7CisgICAgICAgIGNhbmRpZGF0ZUNv
bnRlbnQuYXBwZW5kKCptX3BhcnRpYWxMZWFkaW5nVGV4dEl0ZW0sIGl0ZW1XaWR0aCk7CisgICAg
ICAgIGN1cnJlbnRMb2dpY2FsUmlnaHQgKz0gaXRlbVdpZHRoOworICAgICAgICArK2lubGluZUl0
ZW1JbmRleDsKKyAgICB9CisKKyAgICB3aGlsZSAoaW5saW5lSXRlbUluZGV4IDwgbV9pbmxpbmVJ
dGVtcy5zaXplKCkpIHsKKyAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9ICptX2lubGluZUl0ZW1z
W2lubGluZUl0ZW1JbmRleF07CisgICAgICAgIGlmIChpbmxpbmVJdGVtLmlzRmxvYXQoKSkgewor
ICAgICAgICAgICAgLy8gRmxvYXRzIGFyZSBub3QgcGFydCBvZiB0aGUgbGluZSBjb250ZXh0Lgor
ICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlmIHRoZWlyIHdpZHRoIHNob3VsZCBiZSBhZGRl
ZCB0byBjdXJyZW50TG9naWNhbFJpZ2h0LgorICAgICAgICAgICAgY2FuZGlkYXRlQ29udGVudC5h
cHBlbmQoaW5saW5lSXRlbSwgeyB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIGlmIChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIC8v
IFdlIGRlZmluaXRlbHkgbmVlZCB0byBzdG9wIGF0IHRoZSBsaW5lIGJyZWFrLgorICAgICAgICAg
ICAgY2FuZGlkYXRlQ29udGVudC5zZXRFbmRzV2l0aExpbmVCcmVhaygpOworICAgICAgICAgICAg
cmV0dXJuIGNhbmRpZGF0ZUNvbnRlbnQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKExpbmVCcmVh
a2VyOjpsYXN0U29mdFdyYXBPcHBvcnR1bml0eShpbmxpbmVJdGVtLCBjYW5kaWRhdGVDb250ZW50
LnJ1bnMoKSkpIHsKKyAgICAgICAgICAgIC8vIExldCdzIHdyYXAgdXAgdGhpcyBsaXN0LCBpZiB3
ZSBhcnJpdmVkIHRvIGEgc29mdCB3cmFwIG9wcG9ydHVuaXR5LgorICAgICAgICAgICAgcmV0dXJu
IGNhbmRpZGF0ZUNvbnRlbnQ7CiAgICAgICAgIH0KLSAgICAgICAgYXV0byBsaW5lSXNDb25zaWRl
cmVkRW1wdHkgPSBsaW5lLmlzVmlzdWFsbHlFbXB0eSgpICYmICFsaW5lLmhhc0ludHJ1c2l2ZUZs
b2F0KCk7Ci0gICAgICAgIGlmIChMaW5lQnJlYWtlcigpLnNob3VsZFdyYXBGbG9hdEJveChpdGVt
TG9naWNhbFdpZHRoLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgKyBsaW5lLnRyYWlsaW5nQ29sbGFw
c2libGVXaWR0aCgpLCBsaW5lSXNDb25zaWRlcmVkRW1wdHkpKQotICAgICAgICAgICAgcmV0dXJu
IElzRW5kT2ZMaW5lOjpZZXM7CiAKKyAgICAgICAgYXV0byBpbmxpbmVJdGVubVdpZHRoID0gaW5s
aW5lSXRlbVdpZHRoKGZvcm1hdHRpbmdDb250ZXh0KCksIGlubGluZUl0ZW0sIGN1cnJlbnRMb2dp
Y2FsUmlnaHQpOworICAgICAgICBjYW5kaWRhdGVDb250ZW50LmFwcGVuZChpbmxpbmVJdGVtLCBp
bmxpbmVJdGVubVdpZHRoKTsKKyAgICAgICAgY3VycmVudExvZ2ljYWxSaWdodCArPSBpbmxpbmVJ
dGVubVdpZHRoOworICAgICAgICArK2lubGluZUl0ZW1JbmRleDsKKyAgICB9CisgICAgcmV0dXJu
IGNhbmRpZGF0ZUNvbnRlbnQ7Cit9CisKK0xpbmVMYXlvdXRDb250ZXh0OjpDb21taXR0ZWRDb250
ZW50IExpbmVMYXlvdXRDb250ZXh0OjphZGRGbG9hdEl0ZW1zKExpbmVCdWlsZGVyJiBsaW5lLCBj
b25zdCBGbG9hdExpc3QmIGZsb2F0cykKK3sKKyAgICBzaXplX3QgY29tbWl0dGVkRmxvYXRJdGVt
Q291bnQgPSAwOworICAgIGZvciAoYXV0byYgZmxvYXRJdGVtIDogZmxvYXRzKSB7CisgICAgICAg
IGF1dG8gbG9naWNhbFdpZHRoID0gaW5saW5lSXRlbVdpZHRoKGZvcm1hdHRpbmdDb250ZXh0KCks
ICpmbG9hdEl0ZW0sIHsgfSk7CisKKyAgICAgICAgYXV0byBsaW5lSXNDb25zaWRlcmVkRW1wdHkg
PSBsaW5lLmlzVmlzdWFsbHlFbXB0eSgpICYmICFsaW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCk7Cisg
ICAgICAgIGlmIChMaW5lQnJlYWtlcigpLnNob3VsZFdyYXBGbG9hdEJveChsb2dpY2FsV2lkdGgs
IGxpbmUuYXZhaWxhYmxlV2lkdGgoKSArIGxpbmUudHJhaWxpbmdDb2xsYXBzaWJsZVdpZHRoKCks
IGxpbmVJc0NvbnNpZGVyZWRFbXB0eSkpCisgICAgICAgICAgICByZXR1cm4geyBJc0VuZE9mTGlu
ZTo6WWVzLCBjb21taXR0ZWRGbG9hdEl0ZW1Db3VudCwgeyB9IH07CiAgICAgICAgIC8vIFRoaXMg
ZmxvYXQgY2FuIHNpdCBvbiB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICBhdXRvJiBmbG9hdEJv
eCA9IGlubGluZUl0ZW0ubGF5b3V0Qm94KCk7CisgICAgICAgICsrY29tbWl0dGVkRmxvYXRJdGVt
Q291bnQ7CisgICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gZmxvYXRJdGVtLT5sYXlvdXRCb3goKTsK
ICAgICAgICAgLy8gU2hyaW5rIGF2YWlsYWJsZSBzcGFjZSBmb3IgY3VycmVudCBsaW5lIGFuZCBt
b3ZlIGV4aXN0aW5nIGlubGluZSBydW5zLgotICAgICAgICBmbG9hdEJveC5pc0xlZnRGbG9hdGlu
Z1Bvc2l0aW9uZWQoKSA/IGxpbmUubW92ZUxvZ2ljYWxMZWZ0KGl0ZW1Mb2dpY2FsV2lkdGgpIDog
bGluZS5tb3ZlTG9naWNhbFJpZ2h0KGl0ZW1Mb2dpY2FsV2lkdGgpOwotICAgICAgICBtX2Zsb2F0
cy5hcHBlbmQobWFrZVdlYWtQdHIoaW5saW5lSXRlbSkpOwotICAgICAgICArK21fY29tbWl0dGVk
SW5saW5lSXRlbUNvdW50OwogICAgICAgICBsaW5lLnNldEhhc0ludHJ1c2l2ZUZsb2F0KCk7Ci0g
ICAgICAgIHJldHVybiBJc0VuZE9mTGluZTo6Tm87Ci0gICAgfQotICAgIC8vIExpbmUgYnJlYWtz
IGFyZSBhbHNvIHNwZWNpYWwuCi0gICAgaWYgKGlubGluZUl0ZW0uaXNMaW5lQnJlYWsoKSkgewot
ICAgICAgICBhdXRvIGlzRW5kT2ZMaW5lID0gSXNFbmRPZkxpbmU6Ok5vOwotICAgICAgICBpZiAo
IW1fdW5jb21taXR0ZWRDb250ZW50LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGlzRW5kT2ZMaW5l
ID0gcHJvY2Vzc1VuY29tbWl0dGVkQ29udGVudChsaW5lKTsKLSAgICAgICAgLy8gV2hlbiB0aGUg
dW5jb21taXR0ZWQgY29udGVudCBmaXRzKG9yIHRoZSBsaW5lIGlzIGVtcHR5KSwgYWRkIHRoZSBs
aW5lIGJyZWFrIHRvIHRoaXMgbGluZSBhcyB3ZWxsLgotICAgICAgICBpZiAoaXNFbmRPZkxpbmUg
PT0gSXNFbmRPZkxpbmU6Ok5vKSB7Ci0gICAgICAgICAgICBtX3VuY29tbWl0dGVkQ29udGVudC5h
cHBlbmQoaW5saW5lSXRlbSwgaXRlbUxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgICAgICBjb21taXRQ
ZW5kaW5nQ29udGVudChsaW5lKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSXNFbmRPZkxp
bmU6OlllczsKKyAgICAgICAgaWYgKGZsb2F0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgp
KQorICAgICAgICAgICAgbGluZS5tb3ZlTG9naWNhbExlZnQobG9naWNhbFdpZHRoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbGluZS5tb3ZlTG9naWNhbFJpZ2h0KGxvZ2ljYWxXaWR0aCk7
CisgICAgICAgIG1fZmxvYXRzLmFwcGVuZChmbG9hdEl0ZW0pOwogICAgIH0KLSAgICBhdXRvIGlz
RW5kT2ZMaW5lID0gSXNFbmRPZkxpbmU6Ok5vOwotICAgIC8vIENhbiB3ZSBjb21taXQgdGhlIHBl
bmRpbmcgY29udGVudCBhbHJlYWR5PwotICAgIGlmIChMaW5lQnJlYWtlcjo6bGFzdFNvZnRXcmFw
T3Bwb3J0dW5pdHkoaW5saW5lSXRlbSwgbV91bmNvbW1pdHRlZENvbnRlbnQucnVucygpKSkKLSAg
ICAgICAgaXNFbmRPZkxpbmUgPSBwcm9jZXNzVW5jb21taXR0ZWRDb250ZW50KGxpbmUpOwotICAg
IC8vIFRoZSBjdXJyZW50IGl0ZW0gbWlnaHQgZml0IGFzIHdlbGwuCi0gICAgaWYgKGlzRW5kT2ZM
aW5lID09IElzRW5kT2ZMaW5lOjpObykKLSAgICAgICAgbV91bmNvbW1pdHRlZENvbnRlbnQuYXBw
ZW5kKGlubGluZUl0ZW0sIGl0ZW1Mb2dpY2FsV2lkdGgpOwotICAgIHJldHVybiBpc0VuZE9mTGlu
ZTsKKyAgICByZXR1cm4geyBJc0VuZE9mTGluZTo6Tm8sIGNvbW1pdHRlZEZsb2F0SXRlbUNvdW50
LCB7IH0gfTsKIH0KIAotTGluZUxheW91dENvbnRleHQ6OklzRW5kT2ZMaW5lIExpbmVMYXlvdXRD
b250ZXh0Ojpwcm9jZXNzVW5jb21taXR0ZWRDb250ZW50KExpbmVCdWlsZGVyJiBsaW5lKQorTGlu
ZUxheW91dENvbnRleHQ6OkNvbW1pdHRlZENvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OnBsYWNl
SW5saW5lQ29udGVudE9uQ3VycmVudExpbmUoTGluZUJ1aWxkZXImIGxpbmUsIGNvbnN0IExpbmVC
cmVha2VyOjpSdW5MaXN0JiBydW5zKQogewogICAgIGF1dG8gc2hvdWxkRGlzYWJsZUh5cGhlbmF0
aW9uID0gWyZdIHsKLSAgICAgICAgYXV0byYgc3R5bGUgPSBtX2Zvcm1hdHRpbmdDb250ZXh0Um9v
dC5zdHlsZSgpOworICAgICAgICBhdXRvJiBzdHlsZSA9IHJvb3QoKS5zdHlsZSgpOwogICAgICAg
ICB1bnNpZ25lZCBsaW1pdExpbmVzID0gc3R5bGUuaHlwaGVuYXRpb25MaW1pdExpbmVzKCkgPT0g
UmVuZGVyU3R5bGU6OmluaXRpYWxIeXBoZW5hdGlvbkxpbWl0TGluZXMoKSA/IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSA6IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRMaW5lcygp
OwogICAgICAgICByZXR1cm4gbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA+PSBsaW1p
dExpbmVzOwogICAgIH07Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgcGVuZGluZyBjb250ZW50IGZp
dHMuCisgICAgLy8gQ2hlY2sgaWYgdGhpcyBuZXcgY29udGVudCBmaXRzLgogICAgIGF1dG8gbGlu
ZUlzQ29uc2lkZXJlZEVtcHR5ID0gbGluZS5pc1Zpc3VhbGx5RW1wdHkoKSAmJiAhbGluZS5oYXNJ
bnRydXNpdmVGbG9hdCgpOworICAgIGF1dG8gbGluZVN0YXR1cyA9IExpbmVCcmVha2VyOjpMaW5l
U3RhdHVzIHsgbGluZS5hdmFpbGFibGVXaWR0aCgpLCBsaW5lLnRyYWlsaW5nQ29sbGFwc2libGVX
aWR0aCgpLCBsaW5lLmlzVHJhaWxpbmdSdW5GdWxseUNvbGxhcHNpYmxlKCksIGxpbmVJc0NvbnNp
ZGVyZWRFbXB0eSB9OwogICAgIGF1dG8gbGluZUJyZWFrZXIgPSBMaW5lQnJlYWtlciB7IH07CisK
ICAgICBpZiAoc2hvdWxkRGlzYWJsZUh5cGhlbmF0aW9uKCkpCiAgICAgICAgIGxpbmVCcmVha2Vy
LnNldEh5cGhlbmF0aW9uRGlzYWJsZWQoKTsKLSAgICBhdXRvIGxpbmVTdGF0dXMgPSBMaW5lQnJl
YWtlcjo6TGluZVN0YXR1cyB7IGxpbmUuYXZhaWxhYmxlV2lkdGgoKSwgbGluZS50cmFpbGluZ0Nv
bGxhcHNpYmxlV2lkdGgoKSwgbGluZS5pc1RyYWlsaW5nUnVuRnVsbHlDb2xsYXBzaWJsZSgpLCBs
aW5lSXNDb25zaWRlcmVkRW1wdHkgfTsKLSAgICBhdXRvIGJyZWFraW5nQ29udGV4dCA9IGxpbmVC
cmVha2VyLmJyZWFraW5nQ29udGV4dEZvcklubGluZUNvbnRlbnQoTGluZUJyZWFrZXI6OkNvbnRp
bm91c0NvbnRlbnQgeyBtX3VuY29tbWl0dGVkQ29udGVudC5ydW5zKCkgfSwgbGluZVN0YXR1cyk7
Ci0gICAgLy8gVGhlIHVuY29tbWl0dGVkIGNvbnRlbnQgY2FuIGZ1bGx5LCBwYXJ0aWFsbHkgZml0
IHRoZSBjdXJyZW50IGxpbmUgKGNvbW1pdC9wYXJ0aWFsIGNvbW1pdCkgb3Igbm90IGF0IGFsbCAo
cmVzZXQpLgotICAgIGlmIChicmVha2luZ0NvbnRleHQuY29udGVudFdyYXBwaW5nUnVsZSA9PSBM
aW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0OjpDb250ZW50V3JhcHBpbmdSdWxlOjpLZWVwKQot
ICAgICAgICBjb21taXRQZW5kaW5nQ29udGVudChsaW5lKTsKLSAgICBlbHNlIGlmIChicmVha2lu
Z0NvbnRleHQuY29udGVudFdyYXBwaW5nUnVsZSA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250
ZXh0OjpDb250ZW50V3JhcHBpbmdSdWxlOjpTcGxpdCkgewotICAgICAgICBBU1NFUlQoYnJlYWtp
bmdDb250ZXh0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQpOwotICAgICAgICBBU1NFUlQobV91bmNv
bW1pdHRlZENvbnRlbnQucnVucygpW2JyZWFraW5nQ29udGV4dC5wYXJ0aWFsVHJhaWxpbmdDb250
ZW50LT50cmlhaWxpbmdSdW5JbmRleF0uaW5saW5lSXRlbS5pc1RleHQoKSk7Ci0gICAgICAgIC8v
IFR1cm4gdGhlIHVuY29tbWl0dGVkIHRyYWlsaW5nIHJ1biBpbnRvIGEgcGFydGlhbCB0cmFpbGlu
ZyBydW4uCi0gICAgICAgIGF1dG8gdHJhaWxpbmdSdW5JbmRleCA9IGJyZWFraW5nQ29udGV4dC5w
YXJ0aWFsVHJhaWxpbmdDb250ZW50LT50cmlhaWxpbmdSdW5JbmRleDsKLSAgICAgICAgYXV0byYg
dHJhaWxpbmdJbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPihtX3VuY29t
bWl0dGVkQ29udGVudC5ydW5zKClbdHJhaWxpbmdSdW5JbmRleF0uaW5saW5lSXRlbSk7CiAKLSAg
ICAgICAgQVNTRVJUKCFtX3BhcnRpYWxUcmFpbGluZ1RleHRJdGVtKTsKLSAgICAgICAgLy8gQ29u
c3RydWN0IGEgcGFydGlhbCB0cmFpbGluZyBpbmxpbmUgcnVuIG9ubHkgaWYgdGhlcmUncyBhIG5l
ZWQgZm9yIG9uZS4KLSAgICAgICAgLy8gV2hlbiBzcGxpdHRpbmcgbXVsdGlwbGUgcnVucyA8c3Bh
biBzdHlsZT0id29yZC1icmVhazogYnJlYWstYWxsIj50ZXh0PC9zcGFuPjxzcGFuPmNvbnRlbnQ8
L3NwYW4+LCB3ZSBtaWdodCBlbmQgdXAgc3BsaXR0aW5nIHRoZW0gYXQgcnVuIGJvdW5kYXJ5Lgot
ICAgICAgICAvLyBJbiBzdWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byBjb25zdHJ1Y3QgYSBwYXJ0
aWFsIHRyYWlsaW5nIGl0ZW0gc2luY2UgdGhlIHRyYWlsaW5nIHJ1biBpcyBub3QgcGFydGlhbCBh
dCBhbGwuCi0gICAgICAgIGlmIChhdXRvIHBhcnRpYWxUcmFpbGluZ1J1biA9IGJyZWFraW5nQ29u
dGV4dC5wYXJ0aWFsVHJhaWxpbmdDb250ZW50LT5wYXJ0aWFsUnVuKSB7Ci0gICAgICAgICAgICBt
X3BhcnRpYWxUcmFpbGluZ1RleHRJdGVtID0gdHJhaWxpbmdJbmxpbmVUZXh0SXRlbS5sZWZ0KHBh
cnRpYWxUcmFpbGluZ1J1bi0+bGVuZ3RoKTsKLSAgICAgICAgICAgIG1fcGFydGlhbENvbnRlbnQg
PSBMaW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQgeyBwYXJ0aWFsVHJhaWxpbmdSdW4tPm5lZWRz
SHlwaGVuLCB0cmFpbGluZ0lubGluZVRleHRJdGVtLmxlbmd0aCgpIC0gcGFydGlhbFRyYWlsaW5n
UnVuLT5sZW5ndGggfTsKLSAgICAgICAgICAgIC8vIEtlZXAgdGhlIG5vbi1vdmVyZmxvdyBwYXJ0
IG9mIHRoZSB1bmNvbW1pdHRlZCBydW5zIGFuZCBhZGQgdGhlIHRyYWlsaW5nIHBhcnRpYWwgY29u
dGVudC4KLSAgICAgICAgICAgIG1fdW5jb21taXR0ZWRDb250ZW50LnNocmluayh0cmFpbGluZ1J1
bkluZGV4KTsKLSAgICAgICAgICAgIG1fdW5jb21taXR0ZWRDb250ZW50LmFwcGVuZCgqbV9wYXJ0
aWFsVHJhaWxpbmdUZXh0SXRlbSwgcGFydGlhbFRyYWlsaW5nUnVuLT5sb2dpY2FsV2lkdGgpOwot
ICAgICAgICAgICAgLy8gQWRqdXN0IGh5cGhlbmF0ZWQgbGluZSBjb3VudC4KLSAgICAgICAgICAg
IGlmIChwYXJ0aWFsVHJhaWxpbmdSdW4tPm5lZWRzSHlwaGVuKQotICAgICAgICAgICAgICAgICsr
bV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIFRyaW0gdGhlIG92ZXJmbG93biBydW4gYW5kIGtlZXAgdGhlIHRyYWlsaW5nIChu
b24tcGFydGlhbCkgcnVuIGluIHRoZSBxdWV1ZS4KLSAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3du
UnVuSW5kZXggPSB0cmFpbGluZ1J1bkluZGV4ICsgMTsKLSAgICAgICAgICAgIEFTU0VSVChvdmVy
Zmxvd25SdW5JbmRleCA8IG1fdW5jb21taXR0ZWRDb250ZW50LnNpemUoKSk7Ci0gICAgICAgICAg
ICBtX3VuY29tbWl0dGVkQ29udGVudC5zaHJpbmsob3ZlcmZsb3duUnVuSW5kZXgpOwotICAgICAg
ICB9Ci0gICAgICAgIGNvbW1pdFBlbmRpbmdDb250ZW50KGxpbmUpOwotICAgIH0gZWxzZSBpZiAo
YnJlYWtpbmdDb250ZXh0LmNvbnRlbnRXcmFwcGluZ1J1bGUgPT0gTGluZUJyZWFrZXI6OkJyZWFr
aW5nQ29udGV4dDo6Q29udGVudFdyYXBwaW5nUnVsZTo6UHVzaCkgewotICAgICAgICBtX3VuY29t
bWl0dGVkQ29udGVudC5yZXNldCgpOwotICAgICAgICAvLyBDbG9zaW5nIHRoZSBsaW5lIHdpdGhv
dXQgYW55IGh5cGhlbi4KLSAgICAgICAgbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA9
IDA7Ci0gICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBicmVha2luZ0NvbnRleHQuY29udGVudFdyYXBwaW5nUnVsZSA9PSBMaW5lQnJlYWtlcjo6QnJl
YWtpbmdDb250ZXh0OjpDb250ZW50V3JhcHBpbmdSdWxlOjpLZWVwID8gSXNFbmRPZkxpbmU6Ok5v
IDogSXNFbmRPZkxpbmU6OlllczsKLX0KKyAgICBhdXRvIGJyZWFraW5nQ29udGV4dCA9IGxpbmVC
cmVha2VyLmJyZWFraW5nQ29udGV4dEZvcklubGluZUNvbnRlbnQoTGluZUJyZWFrZXI6OkNvbnRp
bm91c0NvbnRlbnQgeyBydW5zIH0sIGxpbmVTdGF0dXMpOworICAgIGlmIChicmVha2luZ0NvbnRl
eHQuY29udGVudFdyYXBwaW5nUnVsZSA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0OjpD
b250ZW50V3JhcHBpbmdSdWxlOjpLZWVwKSB7CisgICAgICAgIC8vIFRoaXMgY29udGludW91cyBj
b250ZW50IGNhbiBiZSBmdWxseSBwbGFjZWQgb24gdGhlIGN1cnJlbnQgbGluZS4KKyAgICAgICAg
Y29tbWl0Q29udGVudChsaW5lLCBydW5zLCB7IH0pOworICAgICAgICByZXR1cm4geyBJc0VuZE9m
TGluZTo6Tm8sIHJ1bnMuc2l6ZSgpLCB7IH0gfTsKKyAgICB9CiAKLXZvaWQgTGluZUxheW91dENv
bnRleHQ6OlVuY29tbWl0dGVkQ29udGVudDo6YXBwZW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGlu
ZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQotewotICAgIEFTU0VSVCghaW5s
aW5lSXRlbS5pc0Zsb2F0KCkpOwotICAgIG1fdW5jb21taXR0ZWRMaXN0LmFwcGVuZCh7IGlubGlu
ZUl0ZW0sIGxvZ2ljYWxXaWR0aCB9KTsKLSAgICBtX3dpZHRoICs9IGxvZ2ljYWxXaWR0aDsKLX0K
KyAgICBpZiAoYnJlYWtpbmdDb250ZXh0LmNvbnRlbnRXcmFwcGluZ1J1bGUgPT0gTGluZUJyZWFr
ZXI6OkJyZWFraW5nQ29udGV4dDo6Q29udGVudFdyYXBwaW5nUnVsZTo6UHVzaCkgeworICAgICAg
ICAvLyBUaGlzIGNvbnRpbnVvdXMgY29udGVudCBjYW4ndCBiZSBwbGFjZWQgb24gdGhlIGN1cnJl
bnQgbGluZS4gTm90aGluZyB0byBjb21taXQgYXQgdGhpcyB0aW1lLgorICAgICAgICByZXR1cm4g
eyBJc0VuZE9mTGluZTo6WWVzLCAwLCB7IH0gfTsKKyAgICB9CiAKLXZvaWQgTGluZUxheW91dENv
bnRleHQ6OlVuY29tbWl0dGVkQ29udGVudDo6cmVzZXQoKQotewotICAgIG1fdW5jb21taXR0ZWRM
aXN0LmNsZWFyKCk7Ci0gICAgbV93aWR0aCA9IDBfbHU7CisgICAgaWYgKGJyZWFraW5nQ29udGV4
dC5jb250ZW50V3JhcHBpbmdSdWxlID09IExpbmVCcmVha2VyOjpCcmVha2luZ0NvbnRleHQ6OkNv
bnRlbnRXcmFwcGluZ1J1bGU6OlNwbGl0KSB7CisgICAgICAgIC8vIENvbW1pdCB0aGUgY29tYmlu
YXRpb24gb2YgZnVsbCBhbmQgcGFydGlhbCBjb250ZW50IG9uIHRoZSBjdXJyZW50IGxpbmUuCisg
ICAgICAgIEFTU0VSVChicmVha2luZ0NvbnRleHQucGFydGlhbFRyYWlsaW5nQ29udGVudCk7Cisg
ICAgICAgIGNvbW1pdENvbnRlbnQobGluZSwgcnVucywgYnJlYWtpbmdDb250ZXh0LnBhcnRpYWxU
cmFpbGluZ0NvbnRlbnQpOworICAgICAgICAvLyBXaGVuIHNwbGl0dGluZyBtdWx0aXBsZSBydW5z
IDxzcGFuIHN0eWxlPSJ3b3JkLWJyZWFrOiBicmVhay1hbGwiPnRleHQ8L3NwYW4+PHNwYW4+Y29u
dGVudDwvc3Bhbj4sIHdlIG1pZ2h0IGVuZCB1cCBzcGxpdHRpbmcgdGhlbSBhdCBydW4gYm91bmRh
cnkuCisgICAgICAgIC8vIEl0IHNpbXBseSBtZWFucyB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhIHBh
cnRpYWwgcnVuLiBQYXJ0aWFsIGNvbnRlbnQgeWVzLCBidXQgbm90IHBhcnRpYWwgcnVuLgorICAg
ICAgICBhdXRvIHRyaWFpbGluZ1J1bkluZGV4ID0gYnJlYWtpbmdDb250ZXh0LnBhcnRpYWxUcmFp
bGluZ0NvbnRlbnQtPnRyaWFpbGluZ1J1bkluZGV4OworICAgICAgICBhdXRvIGNvbW1pdHRlZElu
bGluZUl0ZW1Db3VudCA9IHRyaWFpbGluZ1J1bkluZGV4ICsgMTsKKyAgICAgICAgaWYgKCFicmVh
a2luZ0NvbnRleHQucGFydGlhbFRyYWlsaW5nQ29udGVudC0+cGFydGlhbFJ1bikKKyAgICAgICAg
ICAgIHJldHVybiB7IElzRW5kT2ZMaW5lOjpZZXMsIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwg
eyB9IH07CisKKyAgICAgICAgYXV0byBwYXJ0aWFsUnVuID0gKmJyZWFraW5nQ29udGV4dC5wYXJ0
aWFsVHJhaWxpbmdDb250ZW50LT5wYXJ0aWFsUnVuOworICAgICAgICBhdXRvJiB0cmFpbGluZ0lu
bGluZVRleHRJdGVtID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KHJ1bnNbdHJpYWlsaW5nUnVu
SW5kZXhdLmlubGluZUl0ZW0pOworICAgICAgICBhdXRvIG92ZXJmbG93TGVuZ3RoID0gdHJhaWxp
bmdJbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSAtIHBhcnRpYWxSdW4ubGVuZ3RoOworICAgICAgICBy
ZXR1cm4geyBJc0VuZE9mTGluZTo6WWVzLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIExpbmVD
b250ZW50OjpQYXJ0aWFsQ29udGVudCB7IHBhcnRpYWxSdW4ubmVlZHNIeXBoZW4sIG92ZXJmbG93
TGVuZ3RoIH0gfTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IHsgSXNFbmRPZkxpbmU6Ok5vLCAwLCB7IH0gfTsKIH0KIAotdm9pZCBMaW5lTGF5b3V0Q29udGV4
dDo6VW5jb21taXR0ZWRDb250ZW50OjpzaHJpbmsoc2l6ZV90IG5ld1NpemUpCit2b2lkIExpbmVM
YXlvdXRDb250ZXh0Ojpjb21taXRDb250ZW50KExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdCBMaW5l
QnJlYWtlcjo6UnVuTGlzdCYgcnVucywgT3B0aW9uYWw8TGluZUJyZWFrZXI6OkJyZWFraW5nQ29u
dGV4dDo6UGFydGlhbFRyYWlsaW5nQ29udGVudD4gcGFydGlhbFRyYWlsaW5nQ29udGVudCkKIHsK
LSAgICBBU1NFUlQobmV3U2l6ZSk7Ci0gICAgQVNTRVJUKG1fdW5jb21taXR0ZWRMaXN0LnNpemUo
KSk7Ci0gICAgQVNTRVJUKG5ld1NpemUgPCBtX3VuY29tbWl0dGVkTGlzdC5zaXplKCkpOwotICAg
IGZvciAoc2l6ZV90IGkgPSBtX3VuY29tbWl0dGVkTGlzdC5zaXplKCkgLSAxOyBpID49IG5ld1Np
emUgOyAtLWkpCi0gICAgICAgIG1fd2lkdGggLT0gbV91bmNvbW1pdHRlZExpc3RbaV0ubG9naWNh
bFdpZHRoOwotICAgIG1fdW5jb21taXR0ZWRMaXN0LnNocmluayhuZXdTaXplKTsKKyAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcnVucy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgYXV0byYgcnVuID0gcnVuc1tpbmRleF07CisgICAgICAgIGlmIChwYXJ0aWFsVHJhaWxpbmdD
b250ZW50ICYmIHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQtPnRyaWFpbGluZ1J1bkluZGV4ID09IGlu
ZGV4KSB7CisgICAgICAgICAgICBBU1NFUlQocnVuLmlubGluZUl0ZW0uaXNUZXh0KCkpOworICAg
ICAgICAgICAgLy8gQ3JlYXRlIGFuZCBjb21taXQgcGFydGlhbCB0cmFpbGluZyBpdGVtLgorICAg
ICAgICAgICAgaWYgKGF1dG8gcGFydGlhbFJ1biA9IHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQtPnBh
cnRpYWxSdW4pIHsKKyAgICAgICAgICAgICAgICBhdXRvJiB0cmFpbGluZ0lubGluZVRleHRJdGVt
ID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KHJ1bnNbcGFydGlhbFRyYWlsaW5nQ29udGVudC0+
dHJpYWlsaW5nUnVuSW5kZXhdLmlubGluZUl0ZW0pOworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBMaW5lQnVpbGRlciBzaG91bGQgbm90IGhvbGQgb24gdG8gdGhlIElubGluZUl0ZW0uCisgICAg
ICAgICAgICAgICAgQVNTRVJUKCFtX3BhcnRpYWxUcmFpbGluZ1RleHRJdGVtKTsKKyAgICAgICAg
ICAgICAgICBtX3BhcnRpYWxUcmFpbGluZ1RleHRJdGVtID0gdHJhaWxpbmdJbmxpbmVUZXh0SXRl
bS5sZWZ0KHBhcnRpYWxSdW4tPmxlbmd0aCk7CisgICAgICAgICAgICAgICAgbGluZS5hcHBlbmQo
Km1fcGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0sIHBhcnRpYWxSdW4tPmxvZ2ljYWxXaWR0aCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVGhl
IHBhcnRpYWwgcnVuIGlzIHRoZSBsYXN0IGNvbnRlbnQgdG8gY29tbWl0LgorICAgICAgICAgICAg
bGluZS5hcHBlbmQocnVuLmlubGluZUl0ZW0sIHJ1bi5sb2dpY2FsV2lkdGgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGxpbmUuYXBwZW5kKHJ1bi5pbmxpbmVJdGVt
LCBydW4ubG9naWNhbFdpZHRoKTsKKyAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCmlu
ZGV4IDdiNjMzNWFkNzRmYjVhN2NlNWZkNjEwMmY5NzdhOTYxMjY3NWZmYjUuLmNkMDhlNGQzOTAw
ODI4NGVhOWFhMWZmZTI5ZmFmZGUxMDY5NzljNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaApAQCAt
MzMsNiArMzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAK
K3N0cnVjdCBDb250aW5vdXNDb250ZW50OworCiBjbGFzcyBMaW5lTGF5b3V0Q29udGV4dCB7CiBw
dWJsaWM6CiAgICAgTGluZUxheW91dENvbnRleHQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQmLCBjb25zdCBDb250YWluZXImIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3QgSW5saW5l
SXRlbXMmKTsKQEAgLTQ5LDM5ICs1MSwzMCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IERpc3Bs
YXk6OkxpbmVCb3ggbGluZUJveDsKICAgICB9OwogICAgIExpbmVDb250ZW50IGxheW91dExpbmUo
TGluZUJ1aWxkZXImLCB1bnNpZ25lZCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCBPcHRpb25hbDx1
bnNpZ25lZD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKKyAgICB1c2luZyBGbG9hdExp
c3QgPSBWZWN0b3I8V2Vha1B0cjxJbmxpbmVJdGVtPj47CiAKIHByaXZhdGU6Ci0gICAgY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQogICAgIGVudW0gY2xhc3MgSXNFbmRPZkxp
bmUgeyBObywgWWVzIH07Ci0gICAgSXNFbmRPZkxpbmUgcGxhY2VJbmxpbmVJdGVtKExpbmVCdWls
ZGVyJiwgY29uc3QgSW5saW5lSXRlbSYpOwotICAgIHZvaWQgY29tbWl0UGVuZGluZ0NvbnRlbnQo
TGluZUJ1aWxkZXImKTsKLSAgICBMaW5lQ29udGVudCBjbG9zZShMaW5lQnVpbGRlciYsIHVuc2ln
bmVkIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgpOwotICAgIGJvb2wgc2hvdWxkUHJvY2Vzc1VuY29t
bWl0dGVkQ29udGVudChjb25zdCBJbmxpbmVJdGVtJikgY29uc3Q7Ci0gICAgSXNFbmRPZkxpbmUg
cHJvY2Vzc1VuY29tbWl0dGVkQ29udGVudChMaW5lQnVpbGRlciYpOworICAgIHN0cnVjdCBDb21t
aXR0ZWRDb250ZW50IHsKKyAgICAgICAgSXNFbmRPZkxpbmUgaXNFbmRPZkxpbmU7CisgICAgICAg
IHNpemVfdCBjb3VudCB7IDAgfTsKKyAgICAgICAgT3B0aW9uYWwgPExpbmVDb250ZW50OjpQYXJ0
aWFsQ29udGVudD4gcGFydGlhbENvbnRlbnQ7CisgICAgfTsKKyAgICBDb250aW5vdXNDb250ZW50
IG5leHRDb250aW5vdXNDb250ZW50Rm9yTGluZSh1bnNpZ25lZCBpbmxpbmVJdGVtSW5kZXgsIE9w
dGlvbmFsPHVuc2lnbmVkPiBvdmVyZmxvd0xlbmd0aCwgSW5saW5lTGF5b3V0VW5pdCBjdXJyZW50
TG9naWNhbFJpZ2h0KTsKKyAgICBDb21taXR0ZWRDb250ZW50IGFkZEZsb2F0SXRlbXMoTGluZUJ1
aWxkZXImLCBjb25zdCBGbG9hdExpc3QmKTsKKyAgICBDb21taXR0ZWRDb250ZW50IHBsYWNlSW5s
aW5lQ29udGVudE9uQ3VycmVudExpbmUoTGluZUJ1aWxkZXImLCBjb25zdCBMaW5lQnJlYWtlcjo6
UnVuTGlzdCYpOworICAgIHZvaWQgY29tbWl0Q29udGVudChMaW5lQnVpbGRlciYsIGNvbnN0IExp
bmVCcmVha2VyOjpSdW5MaXN0JiwgT3B0aW9uYWw8TGluZUJyZWFrZXI6OkJyZWFraW5nQ29udGV4
dDo6UGFydGlhbFRyYWlsaW5nQ29udGVudD4pOworICAgIExpbmVDb250ZW50IGNsb3NlKExpbmVC
dWlsZGVyJiwgdW5zaWduZWQgbGVhZGluZ0lubGluZUl0ZW1JbmRleCwgdW5zaWduZWQgY29tbWl0
dGVkSW5saW5lSXRlbUNvdW50LCBPcHRpb25hbDxMaW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQ+
KTsKKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KKyAgICBjb25z
dCBDb250YWluZXImIHJvb3QoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0Um9v
dDsgfQogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ7CiAgICAgY29uc3QgQ29udGFpbmVyJiBtX2Zvcm1hdHRpbmdDb250ZXh0Um9v
dDsKICAgICBjb25zdCBJbmxpbmVJdGVtcyYgbV9pbmxpbmVJdGVtczsKLQotICAgIHN0cnVjdCBV
bmNvbW1pdHRlZENvbnRlbnQgewotICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBJbmxpbmVJdGVt
JiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOwotICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQotICAgICAgICBzaXplX3Qgc2l6
ZSgpIHsgcmV0dXJuIHJ1bnMoKS5zaXplKCk7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgeyBy
ZXR1cm4gcnVucygpLmlzRW1wdHkoKTsgfQotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgICAg
IHZvaWQgc2hyaW5rKHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgY29uc3QgTGluZUJyZWFrZXI6
OlJ1bkxpc3QmIHJ1bnMoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVkTGlzdDsgfQotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgTGluZUJyZWFrZXI6OlJ1bkxpc3QgbV91bmNvbW1pdHRlZExp
c3Q7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbV93aWR0aDsKLSAgICB9OwotICAgIFVuY29t
bWl0dGVkQ29udGVudCBtX3VuY29tbWl0dGVkQ29udGVudDsKLSAgICB1bnNpZ25lZCBtX2NvbW1p
dHRlZElubGluZUl0ZW1Db3VudCB7IDAgfTsKLSAgICBWZWN0b3I8V2Vha1B0cjxJbmxpbmVJdGVt
Pj4gbV9mbG9hdHM7CisgICAgRmxvYXRMaXN0IG1fZmxvYXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbmxpbmVUZXh0SXRlbT4gbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4gbV9wYXJ0aWFsVHJhaWxpbmdUZXh0SXRlbTsKLSAgICBP
cHRpb25hbDxMaW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQ+IG1fcGFydGlhbENvbnRlbnQ7CiAg
ICAgdW5zaWduZWQgbV9zdWNjZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCB7IDAgfTsKIH07CiAK
</data>
<flag name="review"
          id="402017"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>