<?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>198986</bug_id>
          
          <creation_ts>2019-06-18 18:05:51 -0700</creation_ts>
          <short_desc>UIContextMenuInteraction implementation for WKContentView</short_desc>
          <delta_ts>2019-06-19 02:45: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>New Bugs</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="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>aestes</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1545917</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-06-18 18:05:51 -0700</bug_when>
    <thetext>UIContextMenuInteraction implementation for WKContentView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545918</commentid>
    <comment_count>1</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-06-18 18:06:41 -0700</bug_when>
    <thetext>&lt;rdar://problem/51875189&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545919</commentid>
    <comment_count>2</comment_count>
      <attachid>372414</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-06-18 18:12:20 -0700</bug_when>
    <thetext>Created attachment 372414
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545928</commentid>
    <comment_count>3</comment_count>
      <attachid>372415</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-06-18 18:39:01 -0700</bug_when>
    <thetext>Created attachment 372415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545934</commentid>
    <comment_count>4</comment_count>
      <attachid>372417</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-06-18 18:52:50 -0700</bug_when>
    <thetext>Created attachment 372417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545936</commentid>
    <comment_count>5</comment_count>
      <attachid>372419</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-06-18 19:09:42 -0700</bug_when>
    <thetext>Created attachment 372419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545945</commentid>
    <comment_count>6</comment_count>
      <attachid>372419</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-06-18 20:16:14 -0700</bug_when>
    <thetext>Comment on attachment 372419
Patch

rs=me once EWS is green.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546002</commentid>
    <comment_count>7</comment_count>
      <attachid>372444</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-06-19 02:05:04 -0700</bug_when>
    <thetext>Created attachment 372444
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546004</commentid>
    <comment_count>8</comment_count>
      <attachid>372446</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-06-19 02:17:20 -0700</bug_when>
    <thetext>Created attachment 372446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546012</commentid>
    <comment_count>9</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-06-19 02:45:46 -0700</bug_when>
    <thetext>Committed r246583: &lt;https://trac.webkit.org/changeset/246583&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372414</attachid>
            <date>2019-06-18 18:12:20 -0700</date>
            <delta_ts>2019-06-18 18:38:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198986-20190619111219.patch</filename>
            <type>text/plain</type>
            <size>43099</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0OTM1YzQ1YzhmZmI4MzFhZjJkYjBk
MDkyNGRkMzcxZDM3NDE1M2UuLmYxMDc4MmMyNzhlODBlNzQ0Njg3OThkNDczNDA1YzFmNjI2NTJh
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDYtMTggIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBpbXBsZW1lbnRh
dGlvbiBmb3IgV0tDb250ZW50VmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk4OTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTg3NTE4OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVVNF
X1VJQ09OVEVYVE1FTlUgZm9yIGlPUyAxMysuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoK
KwogMjAxOS0wNi0xOCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBBZGQgcHJlbGltaW5hcnkgQU5HTEUgYmFja2VuZCB0byBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA1MDg0NzJlYzU5ODFiMzRkZTcwOWZhMmEzMzA2OGZiNmMwNDc2NzI3Li4xZTE2
NTMyMGVjOWRlNmFiYjQ3Y2U5NGM3OTU1MWRmNzEyZDJjZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxOS0wNi0xOCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CisKKyAgICAgICAgVUlDb250ZXh0TWVudUludGVyYWN0aW9uIGltcGxlbWVudGF0aW9uIGZv
ciBXS0NvbnRlbnRWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTg5ODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxODc1MTg5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluY2x1ZGUgKyBzb2Z0
IGxpbmsgRERDb250ZXh0TWVudUFjdGlvbgorICAgICAgICBhbmQgdGVtcG9yYXJpbHkgZGVzY3Jp
YmUgVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgKiBwYWwvc3BpL2lvcy9E
YXRhRGV0ZWN0b3JzVUlTUEkuaDoKKyAgICAgICAgKiBwYWwvc3BpL2lvcy9VSUtpdFNQSS5oOgor
CiAyMDE5LTA2LTE4ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGluayB0byB0aGUgbmV3IEFwcFNTTyBwcml2YXRlIGZyYW1ld29yawpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1
Yjc1NjliOTRlNDVmZGE3MTc4MGZiMGYyMTJlMDFlNzUwMGQxNGM1Li45NGQ5OTQ3NmZmM2M0YWNl
MzNhNDUwMTc2OTNiYjQ4YWRkNzUwMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE5
LTA2LTE4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBVSUNvbnRl
eHRNZW51SW50ZXJhY3Rpb24gaW1wbGVtZW50YXRpb24gZm9yIFdLQ29udGVudFZpZXcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODk4NgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTE4NzUxODk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBh
bmQgaXRzIGRlbGVnYXRlIGFzIGEKKyAgICAgICAgcmVwbGFjZW1lbnQgZm9yIFVJUHJldmlld0l0
ZW1Db250cm9sbGVyIGluIGlPUyAxMy4KKworICAgICAgICBJbiBvcmRlciB0byBwcmVzZXJ2ZSBl
eGlzdGluZyBiZWhhdmlvdXIgYXMgbXVjaCBhcyBwb3NzaWJsZSwKKyAgICAgICAgd2UgY2hlY2sg
Zm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBuZXcgV2ViS2l0IEFQSSB0byBjb25maWd1cmUKKyAg
ICAgICAgdGhlIG1lbnUuIElmIHRoYXQgaXMgbm90IHByZXNlbnQsIHdlIGF0dGVtcHQgdG8gY29u
dmVydAorICAgICAgICB0aGUgcmVzdWx0cyBvZiB0aGUgZXhpc3RpbmcgV2ViS2l0IFdLUHJldmll
d0FjdGlvbiBkZWxlZ2F0ZXMKKyAgICAgICAgaW50byBzb21ldGhpbmcgdGhhdCB3b3JrcyB3aXRo
IFVJQ29udGV4dE1lbnVzLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXR1cEludGVyYWN0aW9uXSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTpd
KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVnaXN0ZXJQcmV2aWV3XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX3VucmVnaXN0ZXJQcmV2aWV3XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgX3Nob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZDpdKToKKyAgICAgICAg
KG5lZWRzRGVwcmVjYXRlZFByZXZpZXdBUEkpOgorICAgICAgICAodWlBY3Rpb25Gb3JQcmV2aWV3
QWN0aW9uKToKKyAgICAgICAgKG1lbnVGcm9tUHJldmlld09yRGVmYXVsdHMpOgorICAgICAgICAo
dGl0bGVGb3JNZW51KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBhc3NpZ25MZWdhY3lEYXRh
Rm9yQ29udGV4dE1lbnVJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNv
bnRleHRNZW51SW50ZXJhY3Rpb246Y29uZmlndXJhdGlvbkZvck1lbnVBdExvY2F0aW9uOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9jb250ZXh0TWVudUludGVyYWN0aW9uOmNvbmZpZ3Vy
YXRpb25Gb3JNZW51QXRMb2NhdGlvbjpjb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IGNvbnRpbnVlQ29udGV4dE1lbnVJbnRlcmFjdGlvbjpdKToKKyAgICAgICAgKHVpSW1h
Z2VGb3JJbWFnZSk6CisgICAgICAgIChjcmVhdGVUYXJnZXRlZFByZXZpZXcpOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IF90YXJnZXRlZFByZXZpZXddKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBjb250ZXh0TWVudUludGVyYWN0aW9uOnByZXZpZXdGb3JIaWdobGlnaHRpbmdNZW51V2l0
aENvbmZpZ3VyYXRpb246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY29udGV4dE1lbnVJ
bnRlcmFjdGlvbldpbGxQcmVzZW50Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNvbnRl
eHRNZW51SW50ZXJhY3Rpb246cHJldmlld0ZvckRpc21pc3NpbmdNZW51V2l0aENvbmZpZ3VyYXRp
b246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY29udGV4dE1lbnVJbnRlcmFjdGlvbjp3
aWxsQ29tbWl0V2l0aEFuaW1hdG9yOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNvbnRl
eHRNZW51SW50ZXJhY3Rpb25EaWRFbmQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2hv
dWxkVXNlUHJldmlld0ZvckxvbmdQcmVzc10pOiBEZWxldGVkLgorCiAyMDE5LTA2LTE4ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBkYXRl
IFdlYktpdCBBUEkgdG8gc2VwYXJhdGVseSByZXRyaWV2ZSBhY3Rpb25zIGFuZCB1c2UgY29udGV4
dCBtZW51cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggOGE1NmM2Y2YwNTMxNjgzZDkwZmMyMzk1ZTMyZWU4ZDk1
NTgyNDNlMi4uODk3MzJhMDg2ZGJmODEyNGMxMzYyZWYyZjQ4YWVjZTgxM2VlMzgzZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCkBAIC0xNTg1LDMgKzE1ODUsNyBAQAogI2lmIChQTEFURk9STShJT1MpICYmIF9fSVBI
T05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMCB8fCBQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNTAwKQogI2RlZmluZSBIQVZF
X0FQUF9TU08gMQogI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMAorI2RlZmluZSBVU0VfVUlDT05URVhUTUVOVSAx
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9EYXRh
RGV0ZWN0b3JzVUlTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9EYXRhRGV0
ZWN0b3JzVUlTUEkuaAppbmRleCAwOWZjNTlmMjAzMTk5YjE0NWJiNTU3MWRlYzc3ZmI4YzA5Mjdi
OGU0Li41NWJmZDExYTU1ZjRjYWVjZGQ2NTZjM2ZiNzE4ZTllZWUzMWMyMDQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvRGF0YURldGVjdG9yc1VJU1BJLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL0RhdGFEZXRlY3RvcnNVSVNQSS5oCkBA
IC0zMSw2ICszMSw3IEBACiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAogI2ltcG9ydCA8
RGF0YURldGVjdG9yc1VJL0REQWN0aW9uLmg+CisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzVUkvRERD
b250ZXh0TWVudUFjdGlvbi5oPgogI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0RERGV0ZWN0aW9u
Q29udHJvbGxlci5oPgogCiAjZWxzZQpAQCAtNDYsNiArNDcsMTAgQEAKIEBwcm9wZXJ0eSAocmVh
ZG9ubHkpIE5TU3RyaW5nICphY3Rpb25VVEk7CiBAZW5kCiAKK0BpbnRlcmZhY2UgRERDb250ZXh0
TWVudUFjdGlvbgorKyAoVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKiljb250ZXh0TWVudUNv
bmZpZ3VyYXRpb25XaXRoVVJMOihOU1VSTCAqKVVSTCBpblZpZXc6KFVJVmlldyAqKXZpZXcgY29u
dGV4dDooTlNEaWN0aW9uYXJ5ICopY29udGV4dCBtZW51SWRlbnRpZmllcjooTlNTdHJpbmcgKilt
ZW51SWRlbnRpZmllcjsKK0BlbmQKKwogQHByb3RvY29sIERERGV0ZWN0aW9uQ29udHJvbGxlcklu
dGVyYWN0aW9uRGVsZWdhdGUgPE5TT2JqZWN0PgogQGVuZAogCkBAIC03MCw2ICs3NSw3IEBACiBA
ZW5kCiAKIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhEYXRhRGV0ZWN0b3JzVUkpCitTT0ZU
X0xJTktfQ0xBU1MoRGF0YURldGVjdG9yc1VJLCBERENvbnRleHRNZW51QWN0aW9uKTsKIFNPRlRf
TElOS19DTEFTUyhEYXRhRGV0ZWN0b3JzVUksIERERGV0ZWN0aW9uQ29udHJvbGxlcikKIFNPRlRf
TElOS19DT05TVEFOVChEYXRhRGV0ZWN0b3JzVUksIGtEYXRhRGV0ZWN0b3JzTGVhZGluZ1RleHQs
IGNvbnN0IE5TU3RyaW5nICopCiBTT0ZUX0xJTktfQ09OU1RBTlQoRGF0YURldGVjdG9yc1VJLCBr
RGF0YURldGVjdG9yc1RyYWlsaW5nVGV4dCwgY29uc3QgTlNTdHJpbmcgKikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggOWI1ZTVhM2NkZTc0OWViYTA5YTY1
NDNjMTU1NWQ3MTgxOTFhYWJkZS4uZjI1ZjJmYjIzNWM2MzQ3Y2IwZjYzMzRlMDNmZmE5NTRhZjk2
YzdkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJ
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTE1
MSwxMCArMTUxLDYgQEAgTlNfQVNTVU1FX05PTk5VTExfRU5ECiAjZW5kaWYgLy8gVVNFKEFQUExF
X0lOVEVSTkFMX1NESykKIAogI2lmIEVOQUJMRShGVUxMX0tFWUJPQVJEX0FDQ0VTUykKLUBpbnRl
cmZhY2UgVUlDb2xvciAoSVBJKQotKyAoVUlDb2xvciAqKWtleWJvYXJkRm9jdXNJbmRpY2F0b3JD
b2xvcjsKLUBlbmQKLQogQGludGVyZmFjZSBVSUZvY3VzUmluZ1N0eWxlIChTdGFnaW5nXzQ3ODMx
ODg2KQogKyAoQ0dGbG9hdCljb3JuZXJSYWRpdXM7CiArIChDR0Zsb2F0KW1heEFscGhhOwpAQCAt
MTYyLDEwICsxNTgsMjIgQEAgTlNfQVNTVU1FX05PTk5VTExfRU5ECiBAZW5kCiAjZW5kaWYKIAot
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi1AaW50ZXJmYWNlIFVJQ29sb3IgKFVJQ29s
b3JJbnRlcm5hbCkKK0BpbnRlcmZhY2UgVUlDb2xvciAoKQorKyAoVUlDb2xvciAqKWtleWJvYXJk
Rm9jdXNJbmRpY2F0b3JDb2xvcjsKICsgKFVJQ29sb3IgKil0YWJsZUNlbGxEZWZhdWx0U2VsZWN0
aW9uVGludENvbG9yOwogQGVuZAorCisjaWYgSEFWRShMSU5LX1BSRVZJRVcpICYmIFVTRShVSUNP
TlRFWFRNRU5VKQorQGludGVyZmFjZSBVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiAoTmVlZGVk
VW50aWw1MTI4ODQzNUZpeGVkKQorQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIGlkIDxOU0Nv
cHlpbmc+IGlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgVUlDb250ZXh0
TWVudUNvbnRlbnRQcmV2aWV3UHJvdmlkZXIgcHJldmlld1Byb3ZpZGVyOworQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHkpIFVJQ29udGV4dE1lbnVBY3Rpb25Qcm92aWRlciBhY3Rpb25Qcm92aWRl
cjsKK0BlbmQKKworQGludGVyZmFjZSBVSVByZXZpZXdBY3Rpb24gKCkKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBzdHJvbmcpIFVJSW1hZ2UgKmltYWdlOworQGVuZAorCiAjZW5kaWYKIAogI2VuZGlm
IC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5kZXggM2U1NzAxN2NhYWYwZGRh
NzdiZDEyOTA5ZGUzYTcxYzVmNWU3YjE5MS4uMzBjMGFkYjIxYWI3Y2IxZGQ3ZDkyODI0NDgxM2U2
MmEzMDhjNDNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAtNTksMTAgKzU5LDYgQEAKICNpbXBvcnQgPHd0
Zi9XZWFrT2JqQ1B0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiBV
U0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBfX2hhc19pbmNsdWRlKDxXZWJLaXRBZGRpdGlvbnMv
V0tJbnRlcmFjdGlvblByZXZpZXdBZGRpdGlvbnMuaD4pCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlv
bnMvV0tJbnRlcmFjdGlvblByZXZpZXdBZGRpdGlvbnMuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2Ug
QVBJIHsKIGNsYXNzIE9wZW5QYW5lbFBhcmFtZXRlcnM7CiB9CkBAIC0xMDEsNiArOTcsNyBAQCBz
dHJ1Y3QgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0OwogQGNsYXNzIFVJSG92ZXJHZXN0dXJlUmVj
b2duaXplcjsKIEBjbGFzcyBXZWJFdmVudDsKIEBjbGFzcyBXS0FjdGlvblNoZWV0QXNzaXN0YW50
OworQGNsYXNzIFdLQ29udGV4dE1lbnVFbGVtZW50SW5mbzsKIEBjbGFzcyBXS0RyYXdpbmdDb29y
ZGluYXRvcjsKIEBjbGFzcyBXS0ZvY3VzZWRGb3JtQ29udHJvbFZpZXc7CiBAY2xhc3MgV0tGb3Jt
SW5wdXRDb250cm9sOwpAQCAtMjQ1LDggKzI0MiwxMyBAQCBzdHJ1Y3QgV0tBdXRvQ29ycmVjdGlv
bkRhdGEgewogICAgIFJldGFpblB0cjxVSUdlc3R1cmVSZWNvZ25pemVyPiBfcHJldmlld1NlY29u
ZGFyeUdlc3R1cmVSZWNvZ25pemVyOwogICAgIFZlY3Rvcjxib29sPiBfZm9jdXNTdGF0ZVN0YWNr
OwogI2lmIEhBVkUoTElOS19QUkVWSUVXKQotI2lmIFVTRShMT05HX1BSRVNTX0ZPUl9MSU5LX1BS
RVZJRVcpCi0gICAgTE9OR19QUkVTU19MSU5LX1BSRVZJRVdfTUVNQkVSUworI2lmIFVTRShVSUNP
TlRFWFRNRU5VKQorICAgIFJldGFpblB0cjxVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24+IF9jb250
ZXh0TWVudUludGVyYWN0aW9uOworICAgIFJldGFpblB0cjxXS0NvbnRleHRNZW51RWxlbWVudElu
Zm8+IF9jb250ZXh0TWVudUVsZW1lbnRJbmZvOworICAgIEJPT0wgX3Nob3dMaW5rUHJldmlld3M7
CisgICAgUmV0YWluUHRyPFVJVmlld0NvbnRyb2xsZXI+IF9jb250ZXh0TWVudUxlZ2FjeVByZXZp
ZXdDb250cm9sbGVyOworICAgIFJldGFpblB0cjxVSU1lbnU+IF9jb250ZXh0TWVudUxlZ2FjeU1l
bnU7CisgICAgQk9PTCBfY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRhOwogI2Vsc2UK
ICAgICBSZXRhaW5QdHI8VUlQcmV2aWV3SXRlbUNvbnRyb2xsZXI+IF9wcmV2aWV3SXRlbUNvbnRy
b2xsZXI7CiAjZW5kaWYKQEAgLTUzMiwxNyArNTM0LDEzIEBAIEZPUl9FQUNIX1BSSVZBVEVfV0tD
T05URU5UVklFV19BQ1RJT04oREVDTEFSRV9XS0NPTlRFTlRWSUVXX0FDVElPTl9GT1JfV0VCX1ZJ
RVcpCiBAZW5kCiAKICNpZiBIQVZFKExJTktfUFJFVklFVykKLSNpZiBVU0UoTE9OR19QUkVTU19G
T1JfTElOS19QUkVWSUVXKQotQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9u
UHJldmlldykgPExPTkdfUFJFU1NfTElOS19QUkVWSUVXX1BST1RPQ09MPgorI2lmIFVTRShVSUNP
TlRFWFRNRU5VKQorQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9uUHJldmll
dykgPFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbkRlbGVnYXRlPgogI2Vsc2UKIEBpbnRlcmZhY2Ug
V0tDb250ZW50VmlldyAoV0tJbnRlcmFjdGlvblByZXZpZXcpIDxVSVByZXZpZXdJdGVtRGVsZWdh
dGU+CiAjZW5kaWYKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHNob3Vs
ZFVzZVByZXZpZXdGb3JMb25nUHJlc3M7Ci0KIC0gKHZvaWQpX3JlZ2lzdGVyUHJldmlldzsKIC0g
KHZvaWQpX3VucmVnaXN0ZXJQcmV2aWV3OwotCiBAZW5kCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0K
aW5kZXggNWNhY2UwNGJlNmUwODkxZTlhZWM2OTE0ZmEwMDYzMzkzNTNhYWZkZi4uZDgyZjdlZTIw
NjQ5NjljMWQxODU4YTBmZDMxMTY1YzM4YmZkMGNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0yOSw2
ICsyOSw3IEBACiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogI2ltcG9ydCAiQVBJVUlDbGll
bnQuaCIKKyNpbXBvcnQgIkNvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXIuaCIKICNpbXBvcnQg
IkRvY3VtZW50RWRpdGluZ0NvbnRleHQuaCIKICNpbXBvcnQgIkVkaXRhYmxlSW1hZ2VDb250cm9s
bGVyLmgiCiAjaW1wb3J0ICJJbnB1dFZpZXdVcGRhdGVEZWZlcnJlci5oIgpAQCAtMTA1LDYgKzEw
Niw5IEBACiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0RhdGFEZXRlY3RvcnNDb3JlU1BJLmg+CiAj
aW1wb3J0IDxwYWwvc3BpL2lvcy9EYXRhRGV0ZWN0b3JzVUlTUEkuaD4KICNpbXBvcnQgPHBhbC9z
cGkvaW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkvaW9zL1VJS2l0
U1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3Rm
L0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvT3B0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9TZXRGb3JTY29wZS5oPgpAQCAtMTUxLDggKzE1NSw5IEBA
IFNPRlRfTElOS19DTEFTUyhNYW5hZ2VkQ29uZmlndXJhdGlvbiwgTUNQcm9maWxlQ29ubmVjdGlv
bik7CiBTT0ZUX0xJTktfQ09OU1RBTlQoTWFuYWdlZENvbmZpZ3VyYXRpb24sIE1DRmVhdHVyZURl
ZmluaXRpb25Mb29rdXBBbGxvd2VkLCBOU1N0cmluZyAqKQogI2VuZGlmCiAKLSNpZiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKSAmJiBfX2hhc19pbmNsdWRlKDxXZWJLaXRBZGRpdGlvbnMvV0tJbnRl
cmFjdGlvblByZXZpZXdBZGRpdGlvbnMuaD4pCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV0tJ
bnRlcmFjdGlvblByZXZpZXdBZGRpdGlvbnMuaD4KKyNpZiBIQVZFKExJTktfUFJFVklFVykgJiYg
VVNFKFVJQ09OVEVYVE1FTlUpCitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCB3ZWJraXRTaG93TGlu
a1ByZXZpZXdzUHJlZmVyZW5jZUtleSA9IEAiV2ViS2l0U2hvd0xpbmtQcmV2aWV3cyI7CitzdGF0
aWMgTlNTdHJpbmcgKiBjb25zdCB3ZWJraXRTaG93TGlua1ByZXZpZXdzUHJlZmVyZW5jZUNoYW5n
ZWROb3RpZmljYXRpb24gPSBAIldlYktpdFNob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdl
ZCI7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdBVENIT1MpCkBAIC03NjQsMTQgKzc2OSwxMCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaGFzRm9jdXNlZEVsZW1lbnQoV2ViS2l0OjpGb2N1c2VkRWxl
bWVudEluZm9ybWF0aW9uIGZvY3VzZWRFbAogICAgIFtfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVy
ZVJlY29nbml6ZXIgc2V0RGVsYXk6aGlnaGxpZ2h0RGVsYXldOwogICAgIFtfaGlnaGxpZ2h0TG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CiAKLSNpZiBIQVZFKExJ
TktfUFJFVklFVykKLSAgICBpZiAoIXNlbGYuc2hvdWxkVXNlUHJldmlld0ZvckxvbmdQcmVzcykK
KyNpZiBIQVZFKExJTktfUFJFVklFVykgJiYgIVVTRShVSUNPTlRFWFRNRU5VKQorICAgIFtzZWxm
IGFkZEdlc3R1cmVSZWNvZ25pemVyOl9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXpl
ci5nZXQoKV07CisgICAgW3NlbGYgX2NyZWF0ZUFuZENvbmZpZ3VyZUxvbmdQcmVzc0dlc3R1cmVS
ZWNvZ25pemVyXTsKICNlbmRpZgotICAgIHsKLSAgICAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29n
bml6ZXI6X2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKLQotICAg
ICAgICBbc2VsZiBfY3JlYXRlQW5kQ29uZmlndXJlTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXJd
OwotICAgIH0KIAogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQogICAgIFtzZWxmIHNldHVw
RHJhZ0FuZERyb3BJbnRlcmFjdGlvbnNdOwpAQCAtNzM2Nyw3ICs3MzY4LDcgQEAgc3RhdGljIFdl
YkV2ZW50RmxhZ3Mgd2ViRXZlbnRGbGFnc0ZvclVJS2V5TW9kaWZpZXJGbGFncyhVSUtleU1vZGlm
aWVyRmxhZ3MgZmxhZ3MKIAogI2lmIEhBVkUoTElOS19QUkVWSUVXKQogICAgIGlmIChbdXNlcklu
dGVyZmFjZUl0ZW0gaXNFcXVhbFRvU3RyaW5nOkAibGlua1ByZXZpZXdQb3BvdmVyQ29udGVudHMi
XSkgewotI2lmIFVTRShMT05HX1BSRVNTX0ZPUl9MSU5LX1BSRVZJRVcpCisjaWYgVVNFKFVJQ09O
VEVYVE1FTlUpCiAgICAgICAgIHJldHVybiBAeyB1c2VySW50ZXJmYWNlSXRlbTogQHsgQCJwYWdl
VVJMIjogV1RGOjp1c2VyVmlzaWJsZVN0cmluZyhfcG9zaXRpb25JbmZvcm1hdGlvbi51cmwpIH0g
fTsKICNlbHNlCiAgICAgICAgIE5TU3RyaW5nICp1cmwgPSBbX3ByZXZpZXdJdGVtQ29udHJvbGxl
ciBwcmV2aWV3RGF0YV1bVUlQcmV2aWV3RGF0YUxpbmtdOwpAQCAtNzQxMSwxNyArNzQxMiw1ODIg
QEAgc3RhdGljIE5TU3RyaW5nICpwcmV2aWV3SWRlbnRpZmllckZvckVsZW1lbnRBY3Rpb24oX1dL
RWxlbWVudEFjdGlvbiAqYWN0aW9uKQogICAgIHJldHVybiBuaWw7CiB9CiAKLSNpZiBVU0UoTE9O
R19QUkVTU19GT1JfTElOS19QUkVWSUVXKQotI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9XS0lu
dGVyYWN0aW9uUHJldmlld0FkZGl0aW9ucy5tbT4KLSNlbHNlCisjaWYgVVNFKFVJQ09OVEVYVE1F
TlUpCiAKIEBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9uUHJldmll
dykKIAotLSAoQk9PTClzaG91bGRVc2VQcmV2aWV3Rm9yTG9uZ1ByZXNzCistICh2b2lkKV9yZWdp
c3RlclByZXZpZXcKIHsKLSAgICByZXR1cm4gTk87CisgICAgaWYgKCFfd2ViVmlldy5hbGxvd3NM
aW5rUHJldmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgX2NvbnRleHRNZW51SW50ZXJhY3Rp
b24gPSBhZG9wdE5TKFtbVUlDb250ZXh0TWVudUludGVyYWN0aW9uIGFsbG9jXSBpbml0V2l0aERl
bGVnYXRlOnNlbGZdKTsKKyAgICBfY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRhID0g
Tk87CisgICAgW3NlbGYgYWRkSW50ZXJhY3Rpb246X2NvbnRleHRNZW51SW50ZXJhY3Rpb24uZ2V0
KCldOworCisgICAgW3NlbGYgX3Nob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZDpuaWxd
OworCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfc2hvd0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFu
Z2VkOikgbmFtZTp3ZWJraXRTaG93TGlua1ByZXZpZXdzUHJlZmVyZW5jZUNoYW5nZWROb3RpZmlj
YXRpb24gb2JqZWN0Om5pbF07Cit9CisKKy0gKHZvaWQpX3VucmVnaXN0ZXJQcmV2aWV3Cit7Cisg
ICAgaWYgKCFfY29udGV4dE1lbnVJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
W3NlbGYgcmVtb3ZlSW50ZXJhY3Rpb246X2NvbnRleHRNZW51SW50ZXJhY3Rpb24uZ2V0KCldOwor
ICAgIF9jb250ZXh0TWVudUludGVyYWN0aW9uID0gbmlsOworCisgICAgW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6d2Via2l0U2hv
d0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwor
fQorCistICh2b2lkKV9zaG93TGlua1ByZXZpZXdzUHJlZmVyZW5jZUNoYW5nZWQ6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgQm9vbGVhbiBrZXlFeGlzdHNBbmRIYXNWYWxp
ZEZvcm1hdCA9IGZhbHNlOworICAgIEJvb2xlYW4gcHJlZlZhbHVlID0gQ0ZQcmVmZXJlbmNlc0dl
dEFwcEJvb2xlYW5WYWx1ZSgoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpd2Via2l0U2hvd0xpbmtQcmV2
aWV3c1ByZWZlcmVuY2VLZXksIGtDRlByZWZlcmVuY2VzQ3VycmVudEFwcGxpY2F0aW9uLCAma2V5
RXhpc3RzQW5kSGFzVmFsaWRGb3JtYXQpOworICAgIGlmIChrZXlFeGlzdHNBbmRIYXNWYWxpZEZv
cm1hdCkKKyAgICAgICAgX3Nob3dMaW5rUHJldmlld3MgPSBwcmVmVmFsdWU7CisgICAgZWxzZQor
ICAgICAgICBfc2hvd0xpbmtQcmV2aWV3cyA9IFlFUzsKK30KKworc3RhdGljIGJvb2wgbmVlZHNE
ZXByZWNhdGVkUHJldmlld0FQSShpZDxXS1VJRGVsZWdhdGU+IGRlbGVnYXRlKQoreworICAgIC8v
IEZJWE1FOiBSZXBsYWNlIHRoZXNlIHdpdGggYm9vbGVhbnMgaW4gVUlEZWxlZ2F0ZS5oLgorICAg
IHJldHVybiBkZWxlZ2F0ZQorICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2ViVmlldzpjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVtZW50OmNvbXBs
ZXRpb25IYW5kbGVyOildCisgICAgJiYgIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yRWxlbWVudDpjb21wbGV0
aW9uSGFuZGxlcjopXQorICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihfd2ViVmlldzpjb250ZXh0TWVudUZvckVsZW1lbnQ6d2lsbENvbW1pdFdpdGhBbmltYXRv
cjopXQorICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJW
aWV3OmNvbnRleHRNZW51Rm9yRWxlbWVudDp3aWxsQ29tbWl0V2l0aEFuaW1hdG9yOildCisgICAg
JiYgIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNvbnRl
eHRNZW51V2lsbFByZXNlbnRGb3JFbGVtZW50OildCisgICAgJiYgIVtkZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVXaWxsUHJlc2VudEZvckVs
ZW1lbnQ6KV0KKyAgICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3dlYlZpZXc6Y29udGV4dE1lbnVEaWRFbmRGb3JFbGVtZW50OildCisgICAgJiYgIVtkZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVEaWRFbmRG
b3JFbGVtZW50OildCisgICAgJiYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHdlYlZpZXc6c2hvdWxkUHJldmlld0VsZW1lbnQ6KV0KKyAgICAgICAgfHwgW2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpwcmV2aWV3aW5nVmlld0NvbnRy
b2xsZXJGb3JFbGVtZW50OmRlZmF1bHRBY3Rpb25zOildCisgICAgICAgIHx8IFtkZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29tbWl0UHJldmlld2luZ1ZpZXdD
b250cm9sbGVyOildCisgICAgICAgIHx8IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKF93ZWJWaWV3OnByZXZpZXdWaWV3Q29udHJvbGxlckZvclVSTDpkZWZhdWx0QWN0aW9u
czplbGVtZW50SW5mbzopXQorICAgICAgICB8fCBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfd2ViVmlldzpwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JVUkw6KV0KKyAgICAg
ICAgfHwgW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6cHJl
dmlld1ZpZXdDb250cm9sbGVyRm9ySW1hZ2U6YWx0ZXJuYXRlVVJMOmRlZmF1bHRBY3Rpb25zOmVs
ZW1lbnRJbmZvOildKTsKK30KKworQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4K
K3N0YXRpYyBOU0FycmF5PFdLUHJldmlld0FjdGlvbiAqPiAqd2tQcmV2aWV3QWN0aW9uc0Zyb21F
bGVtZW50QWN0aW9ucyhOU0FycmF5PF9XS0VsZW1lbnRBY3Rpb24gKj4gKmVsZW1lbnRBY3Rpb25z
LCBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqZWxlbWVudEluZm8pCit7CisgICAgTlNNdXRhYmxl
QXJyYXk8V0tQcmV2aWV3QWN0aW9uICo+ICpwcmV2aWV3QWN0aW9ucyA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhDYXBhY2l0eTpbZWxlbWVudEFjdGlvbnMgY291bnRdXTsKKyAgICBmb3IgKF9X
S0VsZW1lbnRBY3Rpb24gKmVsZW1lbnRBY3Rpb24gaW4gZWxlbWVudEFjdGlvbnMpIHsKKyAgICAg
ICAgV0tQcmV2aWV3QWN0aW9uICpwcmV2aWV3QWN0aW9uID0gW1dLUHJldmlld0FjdGlvbiBhY3Rp
b25XaXRoSWRlbnRpZmllcjpwcmV2aWV3SWRlbnRpZmllckZvckVsZW1lbnRBY3Rpb24oZWxlbWVu
dEFjdGlvbikgdGl0bGU6ZWxlbWVudEFjdGlvbi50aXRsZSBzdHlsZTpVSVByZXZpZXdBY3Rpb25T
dHlsZURlZmF1bHQgaGFuZGxlcjpeKFVJUHJldmlld0FjdGlvbiAqLCBVSVZpZXdDb250cm9sbGVy
ICopIHsKKyAgICAgICAgICAgIFtlbGVtZW50QWN0aW9uIHJ1bkFjdGlvbldpdGhFbGVtZW50SW5m
bzplbGVtZW50SW5mb107CisgICAgICAgIH1dOworICAgICAgICBwcmV2aWV3QWN0aW9uLmltYWdl
ID0gW19XS0VsZW1lbnRBY3Rpb24gaW1hZ2VGb3JFbGVtZW50QWN0aW9uVHlwZTplbGVtZW50QWN0
aW9uLnR5cGVdOworICAgICAgICBbcHJldmlld0FjdGlvbnMgYWRkT2JqZWN0OnByZXZpZXdBY3Rp
b25dOworICAgIH0KKyAgICByZXR1cm4gcHJldmlld0FjdGlvbnM7Cit9CisKK3N0YXRpYyBVSUFj
dGlvbiAqdWlBY3Rpb25Gb3JQcmV2aWV3QWN0aW9uKFVJUHJldmlld0FjdGlvbiAqcHJldmlld0Fj
dGlvbiwgVUlWaWV3Q29udHJvbGxlciAqcHJldmlld1ZpZXdDb250cm9sbGVyKQoreworICAgIC8v
IFVJUHJldmlld0FjdGlvbkl0ZW0uaW1hZ2UgaXMgU1BJLCBzbyBubyBleHRlcm5hbCBjbGllbnRz
IHdpbGwgYmUgYWJsZQorICAgIC8vIHRvIHByb3ZpZGUgZ2x5cGhzIGZvciBhY3Rpb25zIDxyZGFy
Oi8vcHJvYmxlbS81MDE1MTg1NT4uCisgICAgLy8gSG93ZXZlciwgdGhleSBzaG91bGQgbWlncmF0
ZSB0byB0aGUgbmV3IEFQSS4KKworICAgIHJldHVybiBbVUlBY3Rpb24gYWN0aW9uV2l0aFRpdGxl
OnByZXZpZXdBY3Rpb24udGl0bGUgaW1hZ2U6cHJldmlld0FjdGlvbi5pbWFnZSBpZGVudGlmaWVy
Om5pbCBoYW5kbGVyOl4oVUlBY3Rpb24gKmFjdGlvbikgeworICAgICAgICBwcmV2aWV3QWN0aW9u
LmhhbmRsZXIocHJldmlld0FjdGlvbiwgcHJldmlld1ZpZXdDb250cm9sbGVyKTsKKyAgICB9XTsK
K30KK0FMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorCitzdGF0aWMgTlNBcnJheTxV
SU1lbnVFbGVtZW50ICo+ICptZW51RWxlbWVudHNGcm9tUHJldmlld09yRGVmYXVsdHMoVUlWaWV3
Q29udHJvbGxlciAqcHJldmlld1ZpZXdDb250cm9sbGVyLCBjb25zdCBSZXRhaW5QdHI8TlNBcnJh
eT4mIGRlZmF1bHRFbGVtZW50QWN0aW9ucywgUmV0YWluUHRyPF9XS0FjdGl2YXRlZEVsZW1lbnRJ
bmZvPiBlbGVtZW50SW5mbykKK3sKKyAgICBhdXRvIGFjdGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXlXaXRoQ2FwYWNpdHk6ZGVmYXVsdEVsZW1lbnRBY3Rpb25zLmdldCgpLmNvdW50XTsKKwor
ICAgIC8vIE9uZSBvZiB0aGUgZGVsZWdhdGVzIG1heSBoYXZlIHByb3ZpZGVkIGEgVUlWaWV3Q29u
dHJvbGxlciB3aXRoIGEgcHJldmlld0FjdGlvbkl0ZW1zIGFycmF5LiBJZiBzbywKKyAgICAvLyB3
ZSBuZWVkIHRvIGNvbnZlcnQgZWFjaCBVSVByZXZpZXdBY3Rpb25JdGVtIGludG8gYSBVSUFjdGlv
bi4KKyAgICBpZiAocHJldmlld1ZpZXdDb250cm9sbGVyKSB7CisgICAgICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgIE5TQXJyYXk8aWQ8VUlQcmV2aWV3QWN0
aW9uSXRlbT4+ICpwcmV2aWV3QWN0aW9ucyA9IHByZXZpZXdWaWV3Q29udHJvbGxlci5wcmV2aWV3
QWN0aW9uSXRlbXM7CisgICAgICAgIGZvciAoVUlQcmV2aWV3QWN0aW9uICpwcmV2aWV3QWN0aW9u
IGluIHByZXZpZXdBY3Rpb25zKQorICAgICAgICAgICAgW2FjdGlvbnMgYWRkT2JqZWN0OnVpQWN0
aW9uRm9yUHJldmlld0FjdGlvbihwcmV2aWV3QWN0aW9uLCBwcmV2aWV3Vmlld0NvbnRyb2xsZXIp
XTsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisgICAgfQorCisg
ICAgaWYgKCFbYWN0aW9ucyBjb3VudF0pIHsKKyAgICAgICAgLy8gV2UgZWl0aGVyIGRpZG4ndCBn
ZXQgYSBjdXN0b20gcHJldmlldyBVSVZpZXdDb250cm9sbGVyLCBvciBpdCBkaWRuJ3QgcHJvdmlk
ZSBhbnkgYWN0aW9ucworICAgICAgICAvLyBzbyB3ZSBzaG91bGQgdXNlIHRoZSBkZWZhdWx0IHNl
dC4KKyAgICAgICAgZm9yIChfV0tFbGVtZW50QWN0aW9uICplbGVtZW50QWN0aW9uIGluIGRlZmF1
bHRFbGVtZW50QWN0aW9ucy5nZXQoKSkgeworICAgICAgICAgICAgVUlJbWFnZSAqaW1hZ2UgPSBb
X1dLRWxlbWVudEFjdGlvbiBpbWFnZUZvckVsZW1lbnRBY3Rpb25UeXBlOmVsZW1lbnRBY3Rpb24u
dHlwZV07CisKKyAgICAgICAgICAgIFthY3Rpb25zIGFkZE9iamVjdDpbVUlBY3Rpb24gYWN0aW9u
V2l0aFRpdGxlOmVsZW1lbnRBY3Rpb24udGl0bGUgaW1hZ2U6aW1hZ2UgaWRlbnRpZmllcjpuaWwg
aGFuZGxlcjpeKFVJQWN0aW9uICopIHsKKyAgICAgICAgICAgICAgICBbZWxlbWVudEFjdGlvbiBy
dW5BY3Rpb25XaXRoRWxlbWVudEluZm86ZWxlbWVudEluZm8uZ2V0KCldOworICAgICAgICAgICAg
fV1dOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFjdGlvbnM7Cit9CisKK3N0YXRp
YyBVSU1lbnUgKm1lbnVGcm9tUHJldmlld09yRGVmYXVsdHMoVUlWaWV3Q29udHJvbGxlciAqcHJl
dmlld1ZpZXdDb250cm9sbGVyLCBjb25zdCBSZXRhaW5QdHI8TlNBcnJheT4mIGRlZmF1bHRFbGVt
ZW50QWN0aW9ucywgUmV0YWluUHRyPF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvPiBlbGVtZW50SW5m
bywgTlNTdHJpbmcgKnRpdGxlKQoreworICAgIGF1dG8gYWN0aW9ucyA9IG1lbnVFbGVtZW50c0Zy
b21QcmV2aWV3T3JEZWZhdWx0cyhwcmV2aWV3Vmlld0NvbnRyb2xsZXIsIGRlZmF1bHRFbGVtZW50
QWN0aW9ucywgZWxlbWVudEluZm8pOworICAgIHJldHVybiBbVUlNZW51IG1lbnVXaXRoVGl0bGU6
dGl0bGUgY2hpbGRyZW46YWN0aW9uc107Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqdGl0bGVGb3JN
ZW51KGJvb2wgaXNMaW5rLCBib29sIHNob3dMaW5rUHJldmlld3MsIGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIGlmIChpc0xpbmsgJiYgIXNob3dMaW5rUHJldmll
d3MpIHsKKyAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoV1RG
Ojpwcm90b2NvbElzSmF2YVNjcmlwdCh1cmwpKQorICAgICAgICAgICAgICAgIHJldHVybiBXRUJf
VUlfU1RSSU5HX0tFWSgiSmF2YVNjcmlwdCIsICJKYXZhU2NyaXB0IEFjdGlvbiBTaGVldCBUaXRs
ZSIsICJUaXRsZSBmb3IgYWN0aW9uIHNoZWV0IGZvciBKYXZhU2NyaXB0IGxpbmsiKTsKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6OnVzZXJWaXNpYmxlU3RyaW5nKHVybCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKCFpc0xpbmsgJiYgIXRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IHRpdGxlOworCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClhc3NpZ25MZWdhY3lEYXRh
Rm9yQ29udGV4dE1lbnVJbnRlcmFjdGlvbgoreworICAgIEFTU0VSVCghX2NvbnRleHRNZW51SGFz
UmVxdWVzdGVkTGVnYWN5RGF0YSk7CisgICAgaWYgKF9jb250ZXh0TWVudUhhc1JlcXVlc3RlZExl
Z2FjeURhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBfY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRM
ZWdhY3lEYXRhID0gWUVTOworCisgICAgaWYgKCFfd2ViVmlldykKKyAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gdWlEZWxlZ2F0ZSA9IHN0YXRpY19jYXN0PGlkPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
Pihfd2ViVmlldy5VSURlbGVnYXRlKTsKKyAgICBpZiAoIXVpRGVsZWdhdGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IGF1dG8mIHVybCA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLnVybDsK
KworICAgIF9wYWdlLT5zdGFydEludGVyYWN0aW9uV2l0aEVsZW1lbnRBdFBvc2l0aW9uKF9wb3Np
dGlvbkluZm9ybWF0aW9uLnJlcXVlc3QucG9pbnQpOworCisgICAgVUlWaWV3Q29udHJvbGxlciAq
cHJldmlld1ZpZXdDb250cm9sbGVyID0gbmlsOworCisgICAgYXV0byBlbGVtZW50SW5mbyA9IGFk
b3B0TlMoW1tfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyBhbGxvY10gX2luaXRXaXRoSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb246X3Bvc2l0aW9uSW5mb3JtYXRpb25dKTsKKworICAgIGlm
IChfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0xpbmspIHsKKyAgICAgICAgX2xvbmdQcmVzc0NhbkNs
aWNrID0gTk87CisKKyAgICAgICAgUmV0YWluUHRyPE5TQXJyYXk8X1dLRWxlbWVudEFjdGlvbiAq
Pj4gZGVmYXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50ID0gW19hY3Rpb25TaGVldEFzc2lzdGFudCBk
ZWZhdWx0QWN0aW9uc0ZvckxpbmtTaGVldDplbGVtZW50SW5mby5nZXQoKV07CisKKyAgICAgICAg
Ly8gRklYTUU6IEFuaW1hdGVkIGltYWdlcyBnbyBoZXJlLgorCisgICAgICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6cHJldmlld2luZ1ZpZXdDb250cm9sbGVyRm9y
RWxlbWVudDpkZWZhdWx0QWN0aW9uczopXSkgeworICAgICAgICAgICAgYXV0byBkZWZhdWx0QWN0
aW9ucyA9IHdrUHJldmlld0FjdGlvbnNGcm9tRWxlbWVudEFjdGlvbnMoZGVmYXVsdEFjdGlvbnNG
cm9tQXNzaXN0YW50LmdldCgpLCBlbGVtZW50SW5mby5nZXQoKSk7CisgICAgICAgICAgICBhdXRv
IHByZXZpZXdFbGVtZW50SW5mbyA9IGFkb3B0TlMoW1tXS1ByZXZpZXdFbGVtZW50SW5mbyBhbGxv
Y10gX2luaXRXaXRoTGlua1VSTDp1cmxdKTsKKyAgICAgICAgICAgIHByZXZpZXdWaWV3Q29udHJv
bGxlciA9IFt1aURlbGVnYXRlIHdlYlZpZXc6X3dlYlZpZXcgcHJldmlld2luZ1ZpZXdDb250cm9s
bGVyRm9yRWxlbWVudDpwcmV2aWV3RWxlbWVudEluZm8uZ2V0KCkgZGVmYXVsdEFjdGlvbnM6ZGVm
YXVsdEFjdGlvbnNdOworICAgICAgICB9IGVsc2UgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6cHJldmlld1ZpZXdDb250cm9sbGVyRm9yVVJMOmRl
ZmF1bHRBY3Rpb25zOmVsZW1lbnRJbmZvOildKQorICAgICAgICAgICAgcHJldmlld1ZpZXdDb250
cm9sbGVyID0gW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgcHJldmlld1ZpZXdDb250cm9s
bGVyRm9yVVJMOnVybCBkZWZhdWx0QWN0aW9uczpkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQu
Z2V0KCkgZWxlbWVudEluZm86ZWxlbWVudEluZm8uZ2V0KCldOworICAgICAgICBlbHNlIGlmIChb
dWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnByZXZpZXdW
aWV3Q29udHJvbGxlckZvclVSTDopXSkKKyAgICAgICAgICAgIHByZXZpZXdWaWV3Q29udHJvbGxl
ciA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IHByZXZpZXdWaWV3Q29udHJvbGxlckZv
clVSTDp1cmxdOworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKwor
I2lmIFVTRShEQVRBX0RFVEVDVE9SU19GT1JfREVGQVVMVF9QUkVWSUVXKQorICAgICAgICAvLyBQ
cmV2aW91c2x5LCBVSVByZXZpZXdJdGVtQ29udHJvbGxlciB3b3VsZCBkZXRlY3QgdGhlIGNhc2Ug
d2hlcmUgdGhlcmUgd2FzIG5vIHByZXZpZXdWaWV3Q29udHJvbGxlcgorICAgICAgICAvLyBhbmQg
Y3JlYXRlIG9uZS4gV2UgbmVlZCB0byByZXBsaWNhdGUgdGhpcyBjb2RlIGZvciB0aGUgbmV3IEFQ
SS4KKyAgICAgICAgaWYgKCFwcmV2aWV3Vmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGF1
dG8gZGRDb250ZXh0TWVudUFjdGlvbkNsYXNzID0gZ2V0RERDb250ZXh0TWVudUFjdGlvbkNsYXNz
KCk7CisgICAgICAgICAgICBpZiAoW2RkQ29udGV4dE1lbnVBY3Rpb25DbGFzcyByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGNvbnRleHRNZW51Q29uZmlndXJhdGlvbkZvclVSTDppZGVudGlm
aWVyOnNlbGVjdGVkVGV4dDpyZXN1bHRzOmluVmlldzpjb250ZXh0Om1lbnVJZGVudGlmaWVyOild
KSB7CisgICAgICAgICAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgICAg
ICAgICAgICAgIE5TRGljdGlvbmFyeSAqY29udGV4dCA9IFtzZWxmIGRhdGFEZXRlY3Rpb25Db250
ZXh0Rm9yUG9zaXRpb25JbmZvcm1hdGlvbjpfcG9zaXRpb25JbmZvcm1hdGlvbl07CisgICAgICAg
ICAgICAgICAgUmV0YWluUHRyPFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uPiBkYXRhRGV0ZWN0
b3JzUmVzdWx0ID0gW2RkQ29udGV4dE1lbnVBY3Rpb25DbGFzcyBjb250ZXh0TWVudUNvbmZpZ3Vy
YXRpb25Gb3JVUkw6dXJsIGlkZW50aWZpZXI6X3Bvc2l0aW9uSW5mb3JtYXRpb24uZGF0YURldGVj
dG9ySWRlbnRpZmllciBzZWxlY3RlZFRleHQ6c2VsZi5zZWxlY3RlZFRleHQgcmVzdWx0czpfcG9z
aXRpb25JbmZvcm1hdGlvbi5kYXRhRGV0ZWN0b3JSZXN1bHRzLmdldCgpIGluVmlldzpzZWxmIGNv
bnRleHQ6Y29udGV4dCBtZW51SWRlbnRpZmllcjpuaWxdOworICAgICAgICAgICAgICAgIGlmIChf
c2hvd0xpbmtQcmV2aWV3cyAmJiBkYXRhRGV0ZWN0b3JzUmVzdWx0ICYmIGRhdGFEZXRlY3RvcnNS
ZXN1bHQuZ2V0KCkucHJldmlld1Byb3ZpZGVyKQorICAgICAgICAgICAgICAgICAgICBfY29udGV4
dE1lbnVMZWdhY3lQcmV2aWV3Q29udHJvbGxlciA9IGRhdGFEZXRlY3RvcnNSZXN1bHQuZ2V0KCku
cHJldmlld1Byb3ZpZGVyKCk7CisgICAgICAgICAgICAgICAgaWYgKGRhdGFEZXRlY3RvcnNSZXN1
bHQgJiYgZGF0YURldGVjdG9yc1Jlc3VsdC5nZXQoKS5hY3Rpb25Qcm92aWRlcikgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIG1lbnVFbGVtZW50cyA9IG1lbnVFbGVtZW50c0Zyb21QcmV2aWV3
T3JEZWZhdWx0cyhuaWwsIGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudCwgZWxlbWVudEluZm8p
OworICAgICAgICAgICAgICAgICAgICBfY29udGV4dE1lbnVMZWdhY3lNZW51ID0gZGF0YURldGVj
dG9yc1Jlc3VsdC5nZXQoKS5hY3Rpb25Qcm92aWRlcihtZW51RWxlbWVudHMpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKworICAg
ICAgICBhdXRvIG1lbnVUaXRsZSA9IHRpdGxlRm9yTWVudSh0cnVlLCBfc2hvd0xpbmtQcmV2aWV3
cywgdXJsLCBfcG9zaXRpb25JbmZvcm1hdGlvbi50aXRsZSk7CisgICAgICAgIF9jb250ZXh0TWVu
dUxlZ2FjeU1lbnUgPSBtZW51RnJvbVByZXZpZXdPckRlZmF1bHRzKHByZXZpZXdWaWV3Q29udHJv
bGxlciwgZGVmYXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50LCBlbGVtZW50SW5mbywgbWVudVRpdGxl
KTsKKworICAgIH0gZWxzZSBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNJbWFnZSkgeworICAg
ICAgICBOU1VSTCAqbnNVUkwgPSAoTlNVUkwgKil1cmw7CisgICAgICAgIFJldGFpblB0cjxOU0Rp
Y3Rpb25hcnk+IGltYWdlSW5mbzsKKyAgICAgICAgQVNTRVJUKF9wb3NpdGlvbkluZm9ybWF0aW9u
LmltYWdlKTsKKyAgICAgICAgYXV0byBjZ0ltYWdlID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24uaW1h
Z2UtPm1ha2VDR0ltYWdlQ29weSgpOworICAgICAgICBhdXRvIHVpSW1hZ2UgPSBhZG9wdE5TKFtb
VUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmNnSW1hZ2UuZ2V0KCldKTsKKworICAgICAg
ICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzph
bHRlcm5hdGVVUkxGcm9tSW1hZ2U6dXNlckluZm86KV0pIHsKKyAgICAgICAgICAgIE5TRGljdGlv
bmFyeSAqdXNlckluZm87CisgICAgICAgICAgICBuc1VSTCA9IFt1aURlbGVnYXRlIF93ZWJWaWV3
Ol93ZWJWaWV3IGFsdGVybmF0ZVVSTEZyb21JbWFnZTp1aUltYWdlLmdldCgpIHVzZXJJbmZvOiZ1
c2VySW5mb107CisgICAgICAgICAgICBpbWFnZUluZm8gPSB1c2VySW5mbzsKKyAgICAgICAgfQor
CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgIGlm
IChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OndpbGxQ
cmV2aWV3SW1hZ2VXaXRoVVJMOildKQorICAgICAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6
X3dlYlZpZXcgd2lsbFByZXZpZXdJbWFnZVdpdGhVUkw6X3Bvc2l0aW9uSW5mb3JtYXRpb24uaW1h
Z2VVUkxdOworCisgICAgICAgIFJldGFpblB0cjxOU0FycmF5PF9XS0VsZW1lbnRBY3Rpb24gKj4+
IGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudCA9IFtfYWN0aW9uU2hlZXRBc3Npc3RhbnQgZGVm
YXVsdEFjdGlvbnNGb3JJbWFnZVNoZWV0OmVsZW1lbnRJbmZvLmdldCgpXTsKKworICAgICAgICBp
ZiAoaW1hZ2VJbmZvICYmIFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3dlYlZpZXc6cHJldmlld1ZpZXdDb250cm9sbGVyRm9ySW1hZ2U6YWx0ZXJuYXRlVVJMOmRlZmF1
bHRBY3Rpb25zOmVsZW1lbnRJbmZvOildKQorICAgICAgICAgICAgcHJldmlld1ZpZXdDb250cm9s
bGVyID0gW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgcHJldmlld1ZpZXdDb250cm9sbGVy
Rm9ySW1hZ2U6dWlJbWFnZS5nZXQoKSBhbHRlcm5hdGVVUkw6bnNVUkwgZGVmYXVsdEFjdGlvbnM6
ZGVmYXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50LmdldCgpIGVsZW1lbnRJbmZvOmVsZW1lbnRJbmZv
LmdldCgpXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJldmlld1ZpZXdDb250cm9sbGVy
ID0gW1tXS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6
Y2dJbWFnZSBkZWZhdWx0QWN0aW9uczpkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQuZ2V0KCkg
ZWxlbWVudEluZm86ZWxlbWVudEluZm8uZ2V0KCldOworICAgICAgICBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19FTkQKKworICAgICAgICBhdXRvIG1lbnVUaXRsZSA9IHRpdGxlRm9yTWVu
dShmYWxzZSwgX3Nob3dMaW5rUHJldmlld3MsIHVybCwgX3Bvc2l0aW9uSW5mb3JtYXRpb24udGl0
bGUpOworICAgICAgICBfY29udGV4dE1lbnVMZWdhY3lNZW51ID0gbWVudUZyb21QcmV2aWV3T3JE
ZWZhdWx0cyhwcmV2aWV3Vmlld0NvbnRyb2xsZXIsIGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFu
dCwgZWxlbWVudEluZm8sIG1lbnVUaXRsZSk7CisgICAgfQorCisgICAgX2NvbnRleHRNZW51TGVn
YWN5UHJldmlld0NvbnRyb2xsZXIgPSBfc2hvd0xpbmtQcmV2aWV3cyA/IHByZXZpZXdWaWV3Q29u
dHJvbGxlciA6IG51bGxwdHI7CiB9CiAKKy0gKFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uICop
Y29udGV4dE1lbnVJbnRlcmFjdGlvbjooVUlDb250ZXh0TWVudUludGVyYWN0aW9uICopaW50ZXJh
Y3Rpb24gY29uZmlndXJhdGlvbkZvck1lbnVBdExvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uCit7
CisgICAgLy8gUmVxdWlyZWQgdG8gY29uZm9ybSB0byBVSUNvbnRleHRNZW51SW50ZXJhY3Rpb25E
ZWxlZ2F0ZSwgYnV0IFNQSSB2ZXJzaW9uIHNob3VsZCBiZSBjYWxsZWQgaW5zdGVhZC4KKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKV9jb250
ZXh0TWVudUludGVyYWN0aW9uOihVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24gKilpbnRlcmFjdGlv
biBjb25maWd1cmF0aW9uRm9yTWVudUF0TG9jYXRpb246KENHUG9pbnQpbG9jYXRpb24gY29tcGxl
dGlvbjoodm9pZCheKShVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiAqKSljb21wbGV0aW9uCit7
CisgICAgaWYgKCFfd2ViVmlldykKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24obmlsKTsKKwor
ICAgIGNvbnN0IGF1dG8gcG9zaXRpb24gPSBbaW50ZXJhY3Rpb24gbG9jYXRpb25JblZpZXc6c2Vs
Zl07CisgICAgV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdCByZXF1ZXN0IHsg
V2ViQ29yZTo6cm91bmRlZEludFBvaW50KHBvc2l0aW9uKSB9OworICAgIHJlcXVlc3QuaW5jbHVk
ZVNuYXBzaG90ID0gdHJ1ZTsKKyAgICByZXF1ZXN0LmluY2x1ZGVMaW5rSW5kaWNhdG9yID0gdHJ1
ZTsKKworICAgIFtzZWxmIGRvQWZ0ZXJQb3NpdGlvbkluZm9ybWF0aW9uVXBkYXRlOlt3ZWFrU2Vs
ZiA9IFdlYWtPYmpDUHRyPFdLQ29udGVudFZpZXc+KHNlbGYpLCBjb21wbGV0aW9uID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb24pXSAoV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbikgeworICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAg
ICAgaWYgKCFzdHJvbmdTZWxmKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24obmlsKTsK
KyAgICAgICAgW3N0cm9uZ1NlbGYgY29udGludWVDb250ZXh0TWVudUludGVyYWN0aW9uOmNvbXBs
ZXRpb24uZ2V0KCldOworICAgIH0gZm9yUmVxdWVzdDpyZXF1ZXN0XTsKK30KKworLSAodm9pZClj
b250aW51ZUNvbnRleHRNZW51SW50ZXJhY3Rpb246KHZvaWQoXikoVUlDb250ZXh0TWVudUNvbmZp
Z3VyYXRpb24gKikpY29tcGxldGlvbgoreworICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24u
aXNMaW5rICYmICFfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0ltYWdlICYmICFfcG9zaXRpb25JbmZv
cm1hdGlvbi5pc0F0dGFjaG1lbnQpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisK
KyAgICBVUkwgbGlua1VSTCA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLnVybDsKKworICAgIGlmIChf
cG9zaXRpb25JbmZvcm1hdGlvbi5pc0xpbmsgJiYgbGlua1VSTC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisKKyAgICBhdXRvIHVpRGVsZWdhdGUgPSBzdGF0aWNf
Y2FzdDxpZDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oX3dlYlZpZXcuVUlEZWxlZ2F0ZSk7CisgICAg
aWYgKCF1aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworCisgICAg
aWYgKG5lZWRzRGVwcmVjYXRlZFByZXZpZXdBUEkodWlEZWxlZ2F0ZSkpIHsKKworICAgICAgICBp
ZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rKSB7CisgICAgICAgICAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRQcmV2aWV3RWxlbWVudDop
XSkgeworICAgICAgICAgICAgICAgIGF1dG8gcHJldmlld0VsZW1lbnRJbmZvID0gYWRvcHROUyhb
W1dLUHJldmlld0VsZW1lbnRJbmZvIGFsbG9jXSBfaW5pdFdpdGhMaW5rVVJMOmxpbmtVUkxdKTsK
KyAgICAgICAgICAgICAgICBpZiAoIVt1aURlbGVnYXRlIHdlYlZpZXc6X3dlYlZpZXcgc2hvdWxk
UHJldmlld0VsZW1lbnQ6cHJldmlld0VsZW1lbnRJbmZvLmdldCgpXSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb24obmlsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorCisgICAgICAgICAgICAvLyBGSVhN
RTogU3VwcG9ydCBKYXZhU2NyaXB0IHVybHMgaGVyZS4gQnV0IG1ha2Ugc3VyZSB0aGV5IGRvbid0
IHNob3cgYSBwcmV2aWV3LgorICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUwNTcyMjgz
PgorICAgICAgICAgICAgaWYgKCFsaW5rVVJMLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewor
I2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICAgICAgICAgICAgICBpZiAoIVdlYkNvcmU6
OkRhdGFEZXRlY3Rpb246OmNhbkJlUHJlc2VudGVkQnlEYXRhRGV0ZWN0b3JzKGxpbmtVUkwpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworI2VuZGlmCisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBfY29udGV4dE1lbnVMZWdhY3lQcmV2aWV3
Q29udHJvbGxlciA9IG51bGxwdHI7CisgICAgICAgIF9jb250ZXh0TWVudUxlZ2FjeU1lbnUgPSBu
dWxscHRyOworICAgICAgICBfY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRhID0gTk87
CisKKyAgICAgICAgVUlDb250ZXh0TWVudUFjdGlvblByb3ZpZGVyIGFjdGlvbk1lbnVQcm92aWRl
ciA9IFt3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLQ29udGVudFZpZXc+KHNlbGYpXSAoTlNBcnJh
eTxVSU1lbnVFbGVtZW50ICo+ICpzdWdnZXN0ZWRBY3Rpb25zKSAtPiBVSU1lbnUgKiB7CisgICAg
ICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgICAgIGlm
ICghc3Ryb25nU2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAg
aWYgKCFzdHJvbmdTZWxmLT5fY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRhKQorICAg
ICAgICAgICAgICAgIFtzdHJvbmdTZWxmIGFzc2lnbkxlZ2FjeURhdGFGb3JDb250ZXh0TWVudUlu
dGVyYWN0aW9uXTsKKworICAgICAgICAgICAgcmV0dXJuIHN0cm9uZ1NlbGYtPl9jb250ZXh0TWVu
dUxlZ2FjeU1lbnUuZ2V0KCk7CisgICAgICAgIH07CisKKyAgICAgICAgVUlDb250ZXh0TWVudUNv
bnRlbnRQcmV2aWV3UHJvdmlkZXIgY29udGVudFByZXZpZXdQcm92aWRlciA9IFt3ZWFrU2VsZiA9
IFdlYWtPYmpDUHRyPFdLQ29udGVudFZpZXc+KHNlbGYpXSAoKSAtPiBVSVZpZXdDb250cm9sbGVy
ICogeworICAgICAgICAgICAgYXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoIXN0cm9uZ1NlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAgICAgICAgIGlmICghc3Ryb25nU2VsZi0+X2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVnYWN5
RGF0YSkKKyAgICAgICAgICAgICAgICBbc3Ryb25nU2VsZiBhc3NpZ25MZWdhY3lEYXRhRm9yQ29u
dGV4dE1lbnVJbnRlcmFjdGlvbl07CisKKyAgICAgICAgICAgIHJldHVybiBzdHJvbmdTZWxmLT5f
Y29udGV4dE1lbnVMZWdhY3lQcmV2aWV3Q29udHJvbGxlci5nZXQoKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHByb3ZpZGUgYW4gaWRlbnRpZmllciBhbmQgQVNT
RVJUIGluIGRlbGVnYXRlcyBpZiB3ZSBkb24ndCBtYXRjaD8KKyAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb24oW1VJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb25XaXRoSWRlbnRp
ZmllcjpuaWwgcHJldmlld1Byb3ZpZGVyOmNvbnRlbnRQcmV2aWV3UHJvdmlkZXIgYWN0aW9uUHJv
dmlkZXI6YWN0aW9uTWVudVByb3ZpZGVyXSk7CisgICAgfQorCisgICAgYXV0byBjb21wbGV0aW9u
QmxvY2sgPSBtYWtlQmxvY2tQdHIoW2NvbXBsZXRpb24gPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
biksIGxpbmtVUkwgPSBXVEZNb3ZlKGxpbmtVUkwpLCB3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdL
Q29udGVudFZpZXc+KHNlbGYpXSAoVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3Vy
YXRpb25Gcm9tV0tVSURlbGVnYXRlKSBtdXRhYmxlIHsKKworICAgICAgICBhdXRvIHN0cm9uZ1Nl
bGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgaWYgKCFzdHJvbmdTZWxmKQorICAgICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb24obmlsKTsKKworICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25G
cm9tV0tVSURlbGVnYXRlKSB7CisKKyAgICAgICAgICAgIHN0cm9uZ1NlbGYtPl9jb250ZXh0TWVu
dUVsZW1lbnRJbmZvID0gbmlsOworCisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhh
dmUgYW4gb2JqZWN0IHdlIG1pZ2h0IHdhbnQgdG8gc2hvdyBhIGNvbnRleHQgbWVudSBmb3IsIGJ1
dCB0aGUKKyAgICAgICAgICAgIC8vIGNsaWVudCB3YXMgdW5hYmxlIHRvIGhhbmRsZSBpdC4gQmVm
b3JlIGdpdmluZyB1cCwgd2UgYXNrIERhdGFEZXRlY3RvcnMuCisKKyNpZiBFTkFCTEUoREFUQV9E
RVRFQ1RJT04pCisgICAgICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBKYXZhU2NyaXB0IHVybHMg
aGVyZS4gQnV0IG1ha2Ugc3VyZSB0aGV5IGRvbid0IHNob3cgYSBwcmV2aWV3LgorICAgICAgICAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUwNTcyMjgzPgorICAgICAgICAgICAgaWYgKCFsaW5rVVJM
LnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSAmJiAhV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6Y2Fu
QmVQcmVzZW50ZWRCeURhdGFEZXRlY3RvcnMobGlua1VSTCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb24obmlsKTsKKworICAgICAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TOworICAgICAgICAgICAgYXV0byBkZENvbnRleHRNZW51QWN0aW9uQ2xhc3MgPSBnZXRE
RENvbnRleHRNZW51QWN0aW9uQ2xhc3MoKTsKKyAgICAgICAgICAgIGlmIChbZGRDb250ZXh0TWVu
dUFjdGlvbkNsYXNzIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29udGV4dE1lbnVDb25m
aWd1cmF0aW9uV2l0aFVSTDppblZpZXc6Y29udGV4dDptZW51SWRlbnRpZmllcjopXSkgeworICAg
ICAgICAgICAgICAgIE5TRGljdGlvbmFyeSAqY29udGV4dCA9IFtzdHJvbmdTZWxmIGRhdGFEZXRl
Y3Rpb25Db250ZXh0Rm9yUG9zaXRpb25JbmZvcm1hdGlvbjpzdHJvbmdTZWxmLT5fcG9zaXRpb25J
bmZvcm1hdGlvbl07CisgICAgICAgICAgICAgICAgVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24g
KmNvbmZpZ3VyYXRpb25Gcm9tREQgPSBbZGRDb250ZXh0TWVudUFjdGlvbkNsYXNzIGNvbnRleHRN
ZW51Q29uZmlndXJhdGlvbkZvclVSTDpsaW5rVVJMIGlkZW50aWZpZXI6c3Ryb25nU2VsZi0+X3Bv
c2l0aW9uSW5mb3JtYXRpb24uZGF0YURldGVjdG9ySWRlbnRpZmllciBzZWxlY3RlZFRleHQ6W3N0
cm9uZ1NlbGYgc2VsZWN0ZWRUZXh0XSByZXN1bHRzOnN0cm9uZ1NlbGYtPl9wb3NpdGlvbkluZm9y
bWF0aW9uLmRhdGFEZXRlY3RvclJlc3VsdHMuZ2V0KCkgaW5WaWV3OnN0cm9uZ1NlbGYuZ2V0KCkg
Y29udGV4dDpjb250ZXh0IG1lbnVJZGVudGlmaWVyOm5pbF07CisgICAgICAgICAgICAgICAgaWYg
KHN0cm9uZ1NlbGYtPl9zaG93TGlua1ByZXZpZXdzKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY29tcGxldGlvbihjb25maWd1cmF0aW9uRnJvbUREKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY29tcGxldGlvbihbVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbldp
dGhJZGVudGlmaWVyOltjb25maWd1cmF0aW9uRnJvbUREIGlkZW50aWZpZXJdIHByZXZpZXdQcm92
aWRlcjpbY29uZmlndXJhdGlvbkZyb21ERCBwcmV2aWV3UHJvdmlkZXJdIGFjdGlvblByb3ZpZGVy
Oltjb25maWd1cmF0aW9uRnJvbUREIGFjdGlvblByb3ZpZGVyXV0pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyNlbmRpZgorICAgICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb24obmlsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlkPE5TQ29w
eWluZz4gaWRlbnRpZmllciA9IFtjb25maWd1cmF0aW9uRnJvbVdLVUlEZWxlZ2F0ZSBpZGVudGlm
aWVyXTsKKyAgICAgICAgVUlDb250ZXh0TWVudUNvbnRlbnRQcmV2aWV3UHJvdmlkZXIgY29udGVu
dFByZXZpZXdQcm92aWRlciA9IFtjb25maWd1cmF0aW9uRnJvbVdLVUlEZWxlZ2F0ZSBwcmV2aWV3
UHJvdmlkZXJdOworICAgICAgICBVSUNvbnRleHRNZW51QWN0aW9uUHJvdmlkZXIgYWN0aW9uTWVu
dVByb3ZpZGVyID0gW2NvbmZpZ3VyYXRpb25Gcm9tV0tVSURlbGVnYXRlIGFjdGlvblByb3ZpZGVy
XTsKKworICAgICAgICBhdXRvIGFjdGlvblByb3ZpZGVyV3JhcHBlciA9IFthY3Rpb25Qcm92aWRl
ckZyb21VSURlbGVnYXRlID0gbWFrZUJsb2NrUHRyKGFjdGlvbk1lbnVQcm92aWRlciksIHdlYWtT
ZWxmID0gV1RGTW92ZSh3ZWFrU2VsZildIChOU0FycmF5PFVJTWVudUVsZW1lbnQgKj4gKnN1Z2dl
c3RlZEFjdGlvbnMpIC0+IFVJTWVudSAqIHsKKyAgICAgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9
IHdlYWtTZWxmLmdldCgpOworICAgICAgICAgICAgaWYgKCFzdHJvbmdTZWxmKQorICAgICAgICAg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgICAgIGF1dG8gZWxlbWVudEluZm8gPSBhZG9w
dE5TKFtbX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gYWxsb2NdIF9pbml0V2l0aEludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uOnN0cm9uZ1NlbGYtPl9wb3NpdGlvbkluZm9ybWF0aW9uXSk7
CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNBcnJheTxfV0tFbGVtZW50QWN0aW9uICo+PiBkZWZh
dWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQgPSBzdHJvbmdTZWxmLT5fcG9zaXRpb25JbmZvcm1hdGlv
bi5pc0xpbmsgPyBbc3Ryb25nU2VsZi0+X2FjdGlvblNoZWV0QXNzaXN0YW50IGRlZmF1bHRBY3Rp
b25zRm9yTGlua1NoZWV0OmVsZW1lbnRJbmZvLmdldCgpXSA6IFtzdHJvbmdTZWxmLT5fYWN0aW9u
U2hlZXRBc3Npc3RhbnQgZGVmYXVsdEFjdGlvbnNGb3JJbWFnZVNoZWV0OmVsZW1lbnRJbmZvLmdl
dCgpXTsKKworICAgICAgICAgICAgYXV0byBtZW51RWxlbWVudHMgPSBtZW51RWxlbWVudHNGcm9t
UHJldmlld09yRGVmYXVsdHMobmlsLCBkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQsIGVsZW1l
bnRJbmZvKTsKKworICAgICAgICAgICAgaWYgKGFjdGlvblByb3ZpZGVyRnJvbVVJRGVsZWdhdGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvblByb3ZpZGVyRnJvbVVJRGVsZWdhdGUobWVu
dUVsZW1lbnRzKTsKKworICAgICAgICAgICAgYXV0byB0aXRsZSA9IHRpdGxlRm9yTWVudShzdHJv
bmdTZWxmLT5fcG9zaXRpb25JbmZvcm1hdGlvbi5pc0xpbmssIHN0cm9uZ1NlbGYtPl9zaG93TGlu
a1ByZXZpZXdzLCBzdHJvbmdTZWxmLT5fcG9zaXRpb25JbmZvcm1hdGlvbi51cmwsIHN0cm9uZ1Nl
bGYtPl9wb3NpdGlvbkluZm9ybWF0aW9uLnRpdGxlKTsKKyAgICAgICAgICAgIHJldHVybiBbVUlN
ZW51IG1lbnVXaXRoVGl0bGU6dGl0bGUgY2hpbGRyZW46bWVudUVsZW1lbnRzXTsKKyAgICAgICAg
fTsKKworICAgICAgICBjb21wbGV0aW9uKFtVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uV2l0aElkZW50aWZpZXI6aWRlbnRpZmllciBwcmV2aWV3UHJvdmlkZXI6Y29udGVu
dFByZXZpZXdQcm92aWRlciBhY3Rpb25Qcm92aWRlcjphY3Rpb25Qcm92aWRlcldyYXBwZXJdKTsK
KyAgICB9KTsKKworICAgIF9jb250ZXh0TWVudUVsZW1lbnRJbmZvID0gd3JhcHBlcihBUEk6OkNv
bnRleHRNZW51RWxlbWVudEluZm86OmNyZWF0ZShfcG9zaXRpb25JbmZvcm1hdGlvbikpOworICAg
IGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNv
bnRleHRNZW51Q29uZmlndXJhdGlvbkZvckVsZW1lbnQ6Y29tcGxldGlvbkhhbmRsZXI6KV0pIHsK
KyAgICAgICAgYXV0byBjaGVja2VyID0gV2ViS2l0OjpDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVj
a2VyOjpjcmVhdGUodWlEZWxlZ2F0ZSwgQHNlbGVjdG9yKF93ZWJWaWV3OmNvbnRleHRNZW51Q29u
ZmlndXJhdGlvbkZvckVsZW1lbnQ6Y29tcGxldGlvbkhhbmRsZXI6KSk7CisgICAgICAgIFt1aURl
bGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51Q29uZmlndXJhdGlvbkZvckVsZW1l
bnQ6X2NvbnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJs
b2NrUHRyKFtjb21wbGV0aW9uQmxvY2sgPSBXVEZNb3ZlKGNvbXBsZXRpb25CbG9jayksIGNoZWNr
ZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKmNvbmZp
Z3VyYXRpb24pIHsKKyAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhh
c0JlZW5DYWxsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjaGVj
a2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25C
bG9jayhjb25maWd1cmF0aW9uKTsKKyAgICAgICAgfSkuZ2V0KCldOworICAgIH0gZWxzZSBpZiAo
X3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rICYmIFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Iod2ViVmlldzpjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVtZW50
OmNvbXBsZXRpb25IYW5kbGVyOildKSB7CisgICAgICAgIGF1dG8gY2hlY2tlciA9IFdlYktpdDo6
Q29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKHVpRGVsZWdhdGUsIEBzZWxlY3Rv
cih3ZWJWaWV3OmNvbnRleHRNZW51Q29uZmlndXJhdGlvbkZvckVsZW1lbnQ6Y29tcGxldGlvbkhh
bmRsZXI6KSk7CisgICAgICAgIFt1aURlbGVnYXRlIHdlYlZpZXc6X3dlYlZpZXcgY29udGV4dE1l
bnVDb25maWd1cmF0aW9uRm9yRWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKSBj
b21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25CbG9jayA9IFdURk1vdmUo
Y29tcGxldGlvbkJsb2NrKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChVSUNvbnRleHRN
ZW51Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgaWYgKGNoZWNr
ZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwor
ICAgICAgICAgICAgY29tcGxldGlvbkJsb2NrKGNvbmZpZ3VyYXRpb24pOworICAgICAgICB9KS5n
ZXQoKV07CisgICAgfSBlbHNlCisgICAgICAgIGNvbXBsZXRpb25CbG9jayhuaWwpOworfQorCitz
dGF0aWMgUmV0YWluUHRyPFVJSW1hZ2U+IHVpSW1hZ2VGb3JJbWFnZShXZWJDb3JlOjpJbWFnZSog
aW1hZ2UpCit7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGF1
dG8gY2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpOworICAgIGlmICghY2dJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBhZG9wdE5TKFtbVUlJbWFnZSBhbGxvY10g
aW5pdFdpdGhDR0ltYWdlOmNnSW1hZ2UuZ2V0KCldKTsKK30KKworLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIG1lcmdlZCB3aXRoIGNyZWF0ZVRhcmdldGVkRHJhZ1ByZXZpZXcgaW4gRHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLgorc3RhdGljIFJldGFpblB0cjxVSVRhcmdldGVkUHJldmlldz4gY3Jl
YXRlVGFyZ2V0ZWRQcmV2aWV3KFVJSW1hZ2UgKmltYWdlLCBVSVZpZXcgKnJvb3RWaWV3LCBVSVZp
ZXcgKnByZXZpZXdDb250YWluZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZnJhbWVJblJv
b3RWaWV3Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiBjbGlw
cGluZ1JlY3RzSW5GcmFtZUNvb3JkaW5hdGVzLCBVSUNvbG9yICpiYWNrZ3JvdW5kQ29sb3IpCit7
CisgICAgaWYgKGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVzLmlzRW1wdHkoKSB8fCAhaW1hZ2Up
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWVJbkNv
bnRhaW5lckNvb3JkaW5hdGVzID0gW3Jvb3RWaWV3IGNvbnZlcnRSZWN0OmZyYW1lSW5Sb290Vmll
d0Nvb3JkaW5hdGVzIHRvVmlldzpwcmV2aWV3Q29udGFpbmVyXTsKKyAgICBpZiAoZnJhbWVJbkNv
bnRhaW5lckNvb3JkaW5hdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IFdlYkNvcmU6OkZsb2F0U2l6ZSBzY2FsaW5nUmF0aW8gPSBmcmFtZUluQ29udGFpbmVyQ29vcmRp
bmF0ZXMuc2l6ZSgpIC8gZnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMuc2l6ZSgpOworICAgIE5T
TXV0YWJsZUFycmF5ICpjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGlu
YXRlcy5zaXplKCldOworCisgICAgZm9yIChhdXRvIHJlY3QgOiBjbGlwcGluZ1JlY3RzSW5GcmFt
ZUNvb3JkaW5hdGVzKSB7CisgICAgICAgIHJlY3Quc2NhbGUoc2NhbGluZ1JhdGlvKTsKKyAgICAg
ICAgW2NsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcyBhZGRPYmplY3Q6W05TVmFs
dWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3RdXTsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8VUlQcmV2
aWV3UGFyYW1ldGVycz4gcGFyYW1ldGVyczsKKyAgICBpZiAoY2xpcHBpbmdSZWN0VmFsdWVzSW5G
cmFtZUNvb3JkaW5hdGVzLmNvdW50KQorICAgICAgICBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW1VJ
UHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExpbmVSZWN0czpjbGlwcGluZ1Jl
Y3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXNdKTsKKyAgICBlbHNlCisgICAgICAgIHBhcmFtZXRl
cnMgPSBhZG9wdE5TKFtbVUlQcmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5pdF0pOworCisgICAg
aWYgKGJhY2tncm91bmRDb2xvcikKKyAgICAgICAgW3BhcmFtZXRlcnMgc2V0QmFja2dyb3VuZENv
bG9yOmJhY2tncm91bmRDb2xvcl07CisKKyAgICBDR1BvaW50IGNlbnRlckluQ29udGFpbmVyQ29v
cmRpbmF0ZXMgPSB7IENHUmVjdEdldE1pZFgoZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzKSwg
Q0dSZWN0R2V0TWlkWShmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMpIH07CisgICAgYXV0byB0
YXJnZXQgPSBhZG9wdE5TKFtbVUlQcmV2aWV3VGFyZ2V0IGFsbG9jXSBpbml0V2l0aENvbnRhaW5l
cjpwcmV2aWV3Q29udGFpbmVyIGNlbnRlcjpjZW50ZXJJbkNvbnRhaW5lckNvb3JkaW5hdGVzXSk7
CisKKyAgICBhdXRvIGltYWdlVmlldyA9IGFkb3B0TlMoW1tVSUltYWdlVmlldyBhbGxvY10gaW5p
dFdpdGhJbWFnZTppbWFnZV0pOworICAgIFtpbWFnZVZpZXcgc2V0RnJhbWU6ZnJhbWVJbkNvbnRh
aW5lckNvb3JkaW5hdGVzXTsKKyAgICByZXR1cm4gYWRvcHROUyhbW1VJVGFyZ2V0ZWRQcmV2aWV3
IGFsbG9jXSBpbml0V2l0aFZpZXc6aW1hZ2VWaWV3LmdldCgpIHBhcmFtZXRlcnM6cGFyYW1ldGVy
cy5nZXQoKSB0YXJnZXQ6dGFyZ2V0LmdldCgpXSk7Cit9CisKKy0gKFVJVGFyZ2V0ZWRQcmV2aWV3
ICopX3RhcmdldGVkUHJldmlldworeworICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0xp
bmsgJiYgX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UpIHsK
KyAgICAgICAgW3NlbGYgX3N0YXJ0U3VwcHJlc3NpbmdTZWxlY3Rpb25Bc3Npc3RhbnRGb3JSZWFz
b246V2ViS2l0OjpJbnRlcmFjdGlvbklzSGFwcGVuaW5nXTsKKworICAgICAgICBhdXRvIGluZGlj
YXRvciA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3I7CisgICAgICAgIGF1dG8g
dGV4dEluZGljYXRvckltYWdlID0gdWlJbWFnZUZvckltYWdlKGluZGljYXRvci5jb250ZW50SW1h
Z2UuZ2V0KCkpOworCisgICAgICAgIHJldHVybiBjcmVhdGVUYXJnZXRlZFByZXZpZXcodGV4dElu
ZGljYXRvckltYWdlLmdldCgpLCBzZWxmLCBzZWxmLnVuc2NhbGVkVmlldywgaW5kaWNhdG9yLnRl
eHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGluZGljYXRvci50ZXh0UmVjdHNJ
bkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzLCBbVUlDb2xvciBjb2xvcldpdGhDR0NvbG9yOmNhY2hl
ZENHQ29sb3IoaW5kaWNhdG9yLmVzdGltYXRlZEJhY2tncm91bmRDb2xvcildKS5hdXRvcmVsZWFz
ZSgpOworICAgIH0KKworICAgIGlmICgoX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNBdHRhY2htZW50
IHx8IF9wb3NpdGlvbkluZm9ybWF0aW9uLmlzSW1hZ2UpICYmIF9wb3NpdGlvbkluZm9ybWF0aW9u
LmltYWdlKSB7CisgICAgICAgIFtzZWxmIF9zdGFydFN1cHByZXNzaW5nU2VsZWN0aW9uQXNzaXN0
YW50Rm9yUmVhc29uOldlYktpdDo6SW50ZXJhY3Rpb25Jc0hhcHBlbmluZ107CisKKyAgICAgICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi5pbWFn
ZS0+bWFrZUNHSW1hZ2VDb3B5KCk7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBhZG9wdE5TKFtbVUlJ
bWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmNnSW1hZ2UuZ2V0KCldKTsKKworICAgICAgICBy
ZXR1cm4gY3JlYXRlVGFyZ2V0ZWRQcmV2aWV3KGltYWdlLmdldCgpLCBzZWxmLCBzZWxmLnVuc2Nh
bGVkVmlldywgX3Bvc2l0aW9uSW5mb3JtYXRpb24uYm91bmRzLCB7IH0sIG5pbCkuYXV0b3JlbGVh
c2UoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmlsOworfQorCistIChVSVRhcmdldGVkUHJldmll
dyAqKWNvbnRleHRNZW51SW50ZXJhY3Rpb246KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWlu
dGVyYWN0aW9uIHByZXZpZXdGb3JIaWdobGlnaHRpbmdNZW51V2l0aENvbmZpZ3VyYXRpb246KFVJ
Q29udGV4dE1lbnVDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbgoreworICAgIHJldHVybiBb
c2VsZiBfdGFyZ2V0ZWRQcmV2aWV3XTsKK30KKworLSAodm9pZCljb250ZXh0TWVudUludGVyYWN0
aW9uV2lsbFByZXNlbnQ6KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uCit7
CisgICAgaWYgKCFfd2ViVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gdWlEZWxlZ2F0
ZSA9IHN0YXRpY19jYXN0PGlkPFdLVUlEZWxlZ2F0ZVByaXZhdGU+Pihfd2ViVmlldy5VSURlbGVn
YXRlKTsKKyAgICBpZiAoIXVpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoW3Vp
RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51
V2lsbFByZXNlbnRGb3JFbGVtZW50OildKQorICAgICAgICBbdWlEZWxlZ2F0ZSB3ZWJWaWV3Ol93
ZWJWaWV3IGNvbnRleHRNZW51V2lsbFByZXNlbnRGb3JFbGVtZW50Ol9jb250ZXh0TWVudUVsZW1l
bnRJbmZvLmdldCgpXTsKKyAgICBlbHNlIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNvbnRleHRNZW51V2lsbFByZXNlbnRGb3JFbGVtZW50Oild
KSB7CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAg
IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51V2lsbFByZXNlbnRGb3JF
bGVtZW50Ol9jb250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpXTsKKyAgICAgICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisgICAgfQorfQorCistIChVSVRhcmdldGVkUHJldmll
dyAqKWNvbnRleHRNZW51SW50ZXJhY3Rpb246KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWlu
dGVyYWN0aW9uIHByZXZpZXdGb3JEaXNtaXNzaW5nTWVudVdpdGhDb25maWd1cmF0aW9uOihVSUNv
bnRleHRNZW51Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24KK3sKKyAgICByZXR1cm4gW3Nl
bGYgX3RhcmdldGVkUHJldmlld107Cit9CisKKy0gKHZvaWQpY29udGV4dE1lbnVJbnRlcmFjdGlv
bjooVUlDb250ZXh0TWVudUludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gd2lsbENvbW1pdFdpdGhB
bmltYXRvcjooaWQ8VUlDb250ZXh0TWVudUludGVyYWN0aW9uQ29tbWl0QW5pbWF0aW5nPilhbmlt
YXRvcgoreworICAgIGlmICghX3dlYlZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIFtzZWxm
IF9zdG9wU3VwcHJlc3NpbmdTZWxlY3Rpb25Bc3Npc3RhbnRGb3JSZWFzb246V2ViS2l0OjpJbnRl
cmFjdGlvbklzSGFwcGVuaW5nXTsKKworICAgIGF1dG8gdWlEZWxlZ2F0ZSA9IHN0YXRpY19jYXN0
PGlkPFdLVUlEZWxlZ2F0ZVByaXZhdGU+Pihfd2ViVmlldy5VSURlbGVnYXRlKTsKKyAgICBpZiAo
IXVpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChuZWVkc0RlcHJlY2F0ZWRQ
cmV2aWV3QVBJKHVpRGVsZWdhdGUpKSB7CisKKyAgICAgICAgaWYgKF9wb3NpdGlvbkluZm9ybWF0
aW9uLmlzSW1hZ2UpIHsKKyAgICAgICAgICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNvbW1pdFByZXZpZXdlZEltYWdlV2l0aFVSTDopXSkg
eworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGltYWdlVVJMID0gX3Bvc2l0aW9uSW5mb3Jt
YXRpb24uaW1hZ2VVUkw7CisgICAgICAgICAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSB8
fCAhKGltYWdlVVJMLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCBpbWFnZVVSTC5wcm90b2Nv
bElzKCJkYXRhIikpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBjb21taXRQcmV2aWV3ZWRJbWFnZVdpdGhVUkw6
KE5TVVJMICopaW1hZ2VVUkxdOworICAgICAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0VORAorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3Iod2ViVmlldzpjb21taXRQcmV2aWV3aW5nVmlld0NvbnRyb2xsZXI6KV0pIHsKKyAgICAgICAg
ICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgICAgICBpZiAo
YXV0byB2aWV3Q29udHJvbGxlciA9IF9jb250ZXh0TWVudUxlZ2FjeVByZXZpZXdDb250cm9sbGVy
LmdldCgpKQorICAgICAgICAgICAgICAgIFt1aURlbGVnYXRlIHdlYlZpZXc6X3dlYlZpZXcgY29t
bWl0UHJldmlld2luZ1ZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVyXTsKKyAgICAgICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3dlYlZpZXc6Y29tbWl0UHJldmlld2VkVmlld0NvbnRyb2xsZXI6KV0pIHsKKyAg
ICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgICAg
ICBpZiAoYXV0byB2aWV3Q29udHJvbGxlciA9IF9jb250ZXh0TWVudUxlZ2FjeVByZXZpZXdDb250
cm9sbGVyLmdldCgpKQorICAgICAgICAgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJW
aWV3IGNvbW1pdFByZXZpZXdlZFZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVyXTsKKyAgICAg
ICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChbdWlE
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVG
b3JFbGVtZW50OndpbGxDb21taXRXaXRoQW5pbWF0b3I6KV0pCisgICAgICAgIFt1aURlbGVnYXRl
IHdlYlZpZXc6X3dlYlZpZXcgY29udGV4dE1lbnVGb3JFbGVtZW50Ol9jb250ZXh0TWVudUVsZW1l
bnRJbmZvLmdldCgpIHdpbGxDb21taXRXaXRoQW5pbWF0b3I6YW5pbWF0b3JdOworICAgIGVsc2Ug
aWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29u
dGV4dE1lbnVGb3JFbGVtZW50OndpbGxDb21taXRXaXRoQW5pbWF0b3I6KV0pIHsKKyAgICAgICAg
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgW3VpRGVsZWdhdGUg
X3dlYlZpZXc6X3dlYlZpZXcgY29udGV4dE1lbnVGb3JFbGVtZW50Ol9jb250ZXh0TWVudUVsZW1l
bnRJbmZvLmdldCgpIHdpbGxDb21taXRXaXRoQW5pbWF0b3I6YW5pbWF0b3JdOworICAgICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAgICB9Cit9CisKKy0gKHZvaWQpY29u
dGV4dE1lbnVJbnRlcmFjdGlvbkRpZEVuZDooVUlDb250ZXh0TWVudUludGVyYWN0aW9uICopaW50
ZXJhY3Rpb24KK3sKKyAgICBpZiAoIV93ZWJWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBb
c2VsZiBfc3RvcFN1cHByZXNzaW5nU2VsZWN0aW9uQXNzaXN0YW50Rm9yUmVhc29uOldlYktpdDo6
SW50ZXJhY3Rpb25Jc0hhcHBlbmluZ107CisKKyAgICAvLyBGSVhNRTogVGhpcyBkZWxlZ2F0ZSBp
cyBiZWluZyBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgYnkgVUlLaXQuIDxyZGFyOi8vcHJvYmxlbS81
MTU1MDI5MT4KKyAgICAvLyBUaGlzIGNvbmRpdGlvbmFsIGF2b2lkcyB0aGUgV0tVSURlbGVnYXRl
IGJlaW5nIGNhbGxlZCB0d2ljZSB0b28uCisgICAgaWYgKCFfY29udGV4dE1lbnVFbGVtZW50SW5m
bykgeworICAgICAgICBhdXRvIHVpRGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxpZDxXS1VJRGVsZWdh
dGVQcml2YXRlPj4oX3dlYlZpZXcuVUlEZWxlZ2F0ZSk7CisgICAgICAgIGlmIChbdWlEZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVEaWRFbmRG
b3JFbGVtZW50OildKQorICAgICAgICAgICAgW3VpRGVsZWdhdGUgd2ViVmlldzpfd2ViVmlldyBj
b250ZXh0TWVudURpZEVuZEZvckVsZW1lbnQ6X2NvbnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCld
OworICAgICAgICBlbHNlIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKF93ZWJWaWV3OmNvbnRleHRNZW51RGlkRW5kRm9yRWxlbWVudDopXSkgeworICAgICAgICAg
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgICAgIFt1aURl
bGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51RGlkRW5kRm9yRWxlbWVudDpfY29u
dGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKV07CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19FTkQKKyAgICAgICAgfQorICAgIH0KKworICAgIF9jb250ZXh0TWVudUxl
Z2FjeVByZXZpZXdDb250cm9sbGVyID0gbnVsbHB0cjsKKyAgICBfY29udGV4dE1lbnVMZWdhY3lN
ZW51ID0gbnVsbHB0cjsKKyAgICBfY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRhID0g
Tk87CisgICAgX2NvbnRleHRNZW51RWxlbWVudEluZm8gPSBudWxscHRyOworfQorCitAZW5kCisK
KyNlbHNlCisKK0BpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9uUHJl
dmlldykKKwogLSAodm9pZClfcmVnaXN0ZXJQcmV2aWV3CiB7CiAgICAgaWYgKCFfd2ViVmlldy5h
bGxvd3NMaW5rUHJldmlldykKQEAgLTc3NjYsNyArODMzMiw3IEBAIHN0YXRpYyBOU1N0cmluZyAq
cHJldmlld0lkZW50aWZpZXJGb3JFbGVtZW50QWN0aW9uKF9XS0VsZW1lbnRBY3Rpb24gKmFjdGlv
bikKIAogQGVuZAogCi0jZW5kaWYgLy8gVVNFKExPTkdfUFJFU1NfRk9SX0xJTktfUFJFVklFVykK
KyNlbmRpZiAvLyBVU0UoVUlDT05URVhUTUVOVSkKIAogI2VuZGlmIC8vIEhBVkUoTElOS19QUkVW
SUVXKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372415</attachid>
            <date>2019-06-18 18:39:01 -0700</date>
            <delta_ts>2019-06-18 18:52:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198986-20190619113859.patch</filename>
            <type>text/plain</type>
            <size>42983</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0OTM1YzQ1YzhmZmI4MzFhZjJkYjBk
MDkyNGRkMzcxZDM3NDE1M2UuLmYxMDc4MmMyNzhlODBlNzQ0Njg3OThkNDczNDA1YzFmNjI2NTJh
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDYtMTggIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBpbXBsZW1lbnRh
dGlvbiBmb3IgV0tDb250ZW50VmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk4OTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTg3NTE4OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVVNF
X1VJQ09OVEVYVE1FTlUgZm9yIGlPUyAxMysuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoK
KwogMjAxOS0wNi0xOCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBBZGQgcHJlbGltaW5hcnkgQU5HTEUgYmFja2VuZCB0byBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA1MDg0NzJlYzU5ODFiMzRkZTcwOWZhMmEzMzA2OGZiNmMwNDc2NzI3Li4xZTE2
NTMyMGVjOWRlNmFiYjQ3Y2U5NGM3OTU1MWRmNzEyZDJjZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxOS0wNi0xOCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CisKKyAgICAgICAgVUlDb250ZXh0TWVudUludGVyYWN0aW9uIGltcGxlbWVudGF0aW9uIGZv
ciBXS0NvbnRlbnRWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTg5ODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxODc1MTg5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluY2x1ZGUgKyBzb2Z0
IGxpbmsgRERDb250ZXh0TWVudUFjdGlvbgorICAgICAgICBhbmQgdGVtcG9yYXJpbHkgZGVzY3Jp
YmUgVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgKiBwYWwvc3BpL2lvcy9E
YXRhRGV0ZWN0b3JzVUlTUEkuaDoKKyAgICAgICAgKiBwYWwvc3BpL2lvcy9VSUtpdFNQSS5oOgor
CiAyMDE5LTA2LTE4ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGluayB0byB0aGUgbmV3IEFwcFNTTyBwcml2YXRlIGZyYW1ld29yawpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1
Yjc1NjliOTRlNDVmZGE3MTc4MGZiMGYyMTJlMDFlNzUwMGQxNGM1Li45NGQ5OTQ3NmZmM2M0YWNl
MzNhNDUwMTc2OTNiYjQ4YWRkNzUwMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE5
LTA2LTE4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBVSUNvbnRl
eHRNZW51SW50ZXJhY3Rpb24gaW1wbGVtZW50YXRpb24gZm9yIFdLQ29udGVudFZpZXcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODk4NgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTE4NzUxODk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBh
bmQgaXRzIGRlbGVnYXRlIGFzIGEKKyAgICAgICAgcmVwbGFjZW1lbnQgZm9yIFVJUHJldmlld0l0
ZW1Db250cm9sbGVyIGluIGlPUyAxMy4KKworICAgICAgICBJbiBvcmRlciB0byBwcmVzZXJ2ZSBl
eGlzdGluZyBiZWhhdmlvdXIgYXMgbXVjaCBhcyBwb3NzaWJsZSwKKyAgICAgICAgd2UgY2hlY2sg
Zm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBuZXcgV2ViS2l0IEFQSSB0byBjb25maWd1cmUKKyAg
ICAgICAgdGhlIG1lbnUuIElmIHRoYXQgaXMgbm90IHByZXNlbnQsIHdlIGF0dGVtcHQgdG8gY29u
dmVydAorICAgICAgICB0aGUgcmVzdWx0cyBvZiB0aGUgZXhpc3RpbmcgV2ViS2l0IFdLUHJldmll
d0FjdGlvbiBkZWxlZ2F0ZXMKKyAgICAgICAgaW50byBzb21ldGhpbmcgdGhhdCB3b3JrcyB3aXRo
IFVJQ29udGV4dE1lbnVzLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXR1cEludGVyYWN0aW9uXSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTpd
KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVnaXN0ZXJQcmV2aWV3XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX3VucmVnaXN0ZXJQcmV2aWV3XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgX3Nob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZDpdKToKKyAgICAgICAg
KG5lZWRzRGVwcmVjYXRlZFByZXZpZXdBUEkpOgorICAgICAgICAodWlBY3Rpb25Gb3JQcmV2aWV3
QWN0aW9uKToKKyAgICAgICAgKG1lbnVGcm9tUHJldmlld09yRGVmYXVsdHMpOgorICAgICAgICAo
dGl0bGVGb3JNZW51KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBhc3NpZ25MZWdhY3lEYXRh
Rm9yQ29udGV4dE1lbnVJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNv
bnRleHRNZW51SW50ZXJhY3Rpb246Y29uZmlndXJhdGlvbkZvck1lbnVBdExvY2F0aW9uOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9jb250ZXh0TWVudUludGVyYWN0aW9uOmNvbmZpZ3Vy
YXRpb25Gb3JNZW51QXRMb2NhdGlvbjpjb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IGNvbnRpbnVlQ29udGV4dE1lbnVJbnRlcmFjdGlvbjpdKToKKyAgICAgICAgKHVpSW1h
Z2VGb3JJbWFnZSk6CisgICAgICAgIChjcmVhdGVUYXJnZXRlZFByZXZpZXcpOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IF90YXJnZXRlZFByZXZpZXddKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBjb250ZXh0TWVudUludGVyYWN0aW9uOnByZXZpZXdGb3JIaWdobGlnaHRpbmdNZW51V2l0
aENvbmZpZ3VyYXRpb246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY29udGV4dE1lbnVJ
bnRlcmFjdGlvbldpbGxQcmVzZW50Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNvbnRl
eHRNZW51SW50ZXJhY3Rpb246cHJldmlld0ZvckRpc21pc3NpbmdNZW51V2l0aENvbmZpZ3VyYXRp
b246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY29udGV4dE1lbnVJbnRlcmFjdGlvbjp3
aWxsQ29tbWl0V2l0aEFuaW1hdG9yOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNvbnRl
eHRNZW51SW50ZXJhY3Rpb25EaWRFbmQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2hv
dWxkVXNlUHJldmlld0ZvckxvbmdQcmVzc10pOiBEZWxldGVkLgorCiAyMDE5LTA2LTE4ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBkYXRl
IFdlYktpdCBBUEkgdG8gc2VwYXJhdGVseSByZXRyaWV2ZSBhY3Rpb25zIGFuZCB1c2UgY29udGV4
dCBtZW51cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggOGE1NmM2Y2YwNTMxNjgzZDkwZmMyMzk1ZTMyZWU4ZDk1
NTgyNDNlMi4uODk3MzJhMDg2ZGJmODEyNGMxMzYyZWYyZjQ4YWVjZTgxM2VlMzgzZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCkBAIC0xNTg1LDMgKzE1ODUsNyBAQAogI2lmIChQTEFURk9STShJT1MpICYmIF9fSVBI
T05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMCB8fCBQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNTAwKQogI2RlZmluZSBIQVZF
X0FQUF9TU08gMQogI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMAorI2RlZmluZSBVU0VfVUlDT05URVhUTUVOVSAx
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9EYXRh
RGV0ZWN0b3JzVUlTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9EYXRhRGV0
ZWN0b3JzVUlTUEkuaAppbmRleCAwOWZjNTlmMjAzMTk5YjE0NWJiNTU3MWRlYzc3ZmI4YzA5Mjdi
OGU0Li41NWJmZDExYTU1ZjRjYWVjZGQ2NTZjM2ZiNzE4ZTllZWUzMWMyMDQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvRGF0YURldGVjdG9yc1VJU1BJLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL0RhdGFEZXRlY3RvcnNVSVNQSS5oCkBA
IC0zMSw2ICszMSw3IEBACiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAogI2ltcG9ydCA8
RGF0YURldGVjdG9yc1VJL0REQWN0aW9uLmg+CisjaW1wb3J0IDxEYXRhRGV0ZWN0b3JzVUkvRERD
b250ZXh0TWVudUFjdGlvbi5oPgogI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0RERGV0ZWN0aW9u
Q29udHJvbGxlci5oPgogCiAjZWxzZQpAQCAtNDYsNiArNDcsMTAgQEAKIEBwcm9wZXJ0eSAocmVh
ZG9ubHkpIE5TU3RyaW5nICphY3Rpb25VVEk7CiBAZW5kCiAKK0BpbnRlcmZhY2UgRERDb250ZXh0
TWVudUFjdGlvbgorKyAoVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKiljb250ZXh0TWVudUNv
bmZpZ3VyYXRpb25XaXRoVVJMOihOU1VSTCAqKVVSTCBpblZpZXc6KFVJVmlldyAqKXZpZXcgY29u
dGV4dDooTlNEaWN0aW9uYXJ5ICopY29udGV4dCBtZW51SWRlbnRpZmllcjooTlNTdHJpbmcgKilt
ZW51SWRlbnRpZmllcjsKK0BlbmQKKwogQHByb3RvY29sIERERGV0ZWN0aW9uQ29udHJvbGxlcklu
dGVyYWN0aW9uRGVsZWdhdGUgPE5TT2JqZWN0PgogQGVuZAogCkBAIC03MCw2ICs3NSw3IEBACiBA
ZW5kCiAKIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhEYXRhRGV0ZWN0b3JzVUkpCitTT0ZU
X0xJTktfQ0xBU1MoRGF0YURldGVjdG9yc1VJLCBERENvbnRleHRNZW51QWN0aW9uKTsKIFNPRlRf
TElOS19DTEFTUyhEYXRhRGV0ZWN0b3JzVUksIERERGV0ZWN0aW9uQ29udHJvbGxlcikKIFNPRlRf
TElOS19DT05TVEFOVChEYXRhRGV0ZWN0b3JzVUksIGtEYXRhRGV0ZWN0b3JzTGVhZGluZ1RleHQs
IGNvbnN0IE5TU3RyaW5nICopCiBTT0ZUX0xJTktfQ09OU1RBTlQoRGF0YURldGVjdG9yc1VJLCBr
RGF0YURldGVjdG9yc1RyYWlsaW5nVGV4dCwgY29uc3QgTlNTdHJpbmcgKikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggOWI1ZTVhM2NkZTc0OWViYTA5YTY1
NDNjMTU1NWQ3MTgxOTFhYWJkZS4uNTgwZDk4YmNjMDM2NzlmYzVhMDMwOGY3OTNkMjQzMDZmOTgy
NzMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJ
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTE1
MSw3ICsxNTEsNyBAQCBOU19BU1NVTUVfTk9OTlVMTF9FTkQKICNlbmRpZiAvLyBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQogCiAjaWYgRU5BQkxFKEZVTExfS0VZQk9BUkRfQUNDRVNTKQotQGludGVy
ZmFjZSBVSUNvbG9yIChJUEkpCitAaW50ZXJmYWNlIFVJQ29sb3IgKCkKICsgKFVJQ29sb3IgKilr
ZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3I7CiBAZW5kCiAKQEAgLTE2Myw5ICsxNjMsMjIgQEAg
TlNfQVNTVU1FX05PTk5VTExfRU5ECiAjZW5kaWYKIAogI2lmIEhBVkUoT1NfREFSS19NT0RFX1NV
UFBPUlQpCi1AaW50ZXJmYWNlIFVJQ29sb3IgKFVJQ29sb3JJbnRlcm5hbCkKK0BpbnRlcmZhY2Ug
VUlDb2xvciAoKQogKyAoVUlDb2xvciAqKXRhYmxlQ2VsbERlZmF1bHRTZWxlY3Rpb25UaW50Q29s
b3I7CiBAZW5kCiAjZW5kaWYKIAorI2lmIEhBVkUoTElOS19QUkVWSUVXKSAmJiBVU0UoVUlDT05U
RVhUTUVOVSkKK0BpbnRlcmZhY2UgVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKE5lZWRlZFVu
dGlsNTEyODg0MzVGaXhlZCkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBpZCA8TlNDb3B5
aW5nPiBpZGVudGlmaWVyOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIFVJQ29udGV4dE1l
bnVDb250ZW50UHJldmlld1Byb3ZpZGVyIHByZXZpZXdQcm92aWRlcjsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBVSUNvbnRleHRNZW51QWN0aW9uUHJvdmlkZXIgYWN0aW9uUHJvdmlkZXI7
CitAZW5kCisKK0BpbnRlcmZhY2UgVUlQcmV2aWV3QWN0aW9uICgpCitAcHJvcGVydHkgKG5vbmF0
b21pYywgc3Ryb25nKSBVSUltYWdlICppbWFnZTsKK0BlbmQKKworI2VuZGlmCisKICNlbmRpZiAv
LyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCmluZGV4IDNlNTcwMTdjYWFmMGRkYTc3
YmQxMjkwOWRlM2E3MWM1ZjVlN2IxOTEuLjMwYzBhZGIyMWFiN2NiMWRkN2Q5MjgyNDQ4MTNlNjJh
MzA4YzQzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLmgKQEAgLTU5LDEwICs1OSw2IEBACiAjaW1wb3J0IDx3dGYv
V2Vha09iakNQdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0jaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykgJiYgX19oYXNfaW5jbHVkZSg8V2ViS2l0QWRkaXRpb25zL1dL
SW50ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+KQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25z
L1dLSW50ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIEFQ
SSB7CiBjbGFzcyBPcGVuUGFuZWxQYXJhbWV0ZXJzOwogfQpAQCAtMTAxLDYgKzk3LDcgQEAgc3Ry
dWN0IFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dDsKIEBjbGFzcyBVSUhvdmVyR2VzdHVyZVJlY29n
bml6ZXI7CiBAY2xhc3MgV2ViRXZlbnQ7CiBAY2xhc3MgV0tBY3Rpb25TaGVldEFzc2lzdGFudDsK
K0BjbGFzcyBXS0NvbnRleHRNZW51RWxlbWVudEluZm87CiBAY2xhc3MgV0tEcmF3aW5nQ29vcmRp
bmF0b3I7CiBAY2xhc3MgV0tGb2N1c2VkRm9ybUNvbnRyb2xWaWV3OwogQGNsYXNzIFdLRm9ybUlu
cHV0Q29udHJvbDsKQEAgLTI0NSw4ICsyNDIsMTMgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25E
YXRhIHsKICAgICBSZXRhaW5QdHI8VUlHZXN0dXJlUmVjb2duaXplcj4gX3ByZXZpZXdTZWNvbmRh
cnlHZXN0dXJlUmVjb2duaXplcjsKICAgICBWZWN0b3I8Ym9vbD4gX2ZvY3VzU3RhdGVTdGFjazsK
ICNpZiBIQVZFKExJTktfUFJFVklFVykKLSNpZiBVU0UoTE9OR19QUkVTU19GT1JfTElOS19QUkVW
SUVXKQotICAgIExPTkdfUFJFU1NfTElOS19QUkVWSUVXX01FTUJFUlMKKyNpZiBVU0UoVUlDT05U
RVhUTUVOVSkKKyAgICBSZXRhaW5QdHI8VUlDb250ZXh0TWVudUludGVyYWN0aW9uPiBfY29udGV4
dE1lbnVJbnRlcmFjdGlvbjsKKyAgICBSZXRhaW5QdHI8V0tDb250ZXh0TWVudUVsZW1lbnRJbmZv
PiBfY29udGV4dE1lbnVFbGVtZW50SW5mbzsKKyAgICBCT09MIF9zaG93TGlua1ByZXZpZXdzOwor
ICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9sbGVyPiBfY29udGV4dE1lbnVMZWdhY3lQcmV2aWV3
Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8VUlNZW51PiBfY29udGV4dE1lbnVMZWdhY3lNZW51
OworICAgIEJPT0wgX2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVnYWN5RGF0YTsKICNlbHNlCiAg
ICAgUmV0YWluUHRyPFVJUHJldmlld0l0ZW1Db250cm9sbGVyPiBfcHJldmlld0l0ZW1Db250cm9s
bGVyOwogI2VuZGlmCkBAIC01MzIsMTcgKzUzNCwxMyBAQCBGT1JfRUFDSF9QUklWQVRFX1dLQ09O
VEVOVFZJRVdfQUNUSU9OKERFQ0xBUkVfV0tDT05URU5UVklFV19BQ1RJT05fRk9SX1dFQl9WSUVX
KQogQGVuZAogCiAjaWYgSEFWRShMSU5LX1BSRVZJRVcpCi0jaWYgVVNFKExPTkdfUFJFU1NfRk9S
X0xJTktfUFJFVklFVykKLUBpbnRlcmZhY2UgV0tDb250ZW50VmlldyAoV0tJbnRlcmFjdGlvblBy
ZXZpZXcpIDxMT05HX1BSRVNTX0xJTktfUFJFVklFV19QUk9UT0NPTD4KKyNpZiBVU0UoVUlDT05U
RVhUTUVOVSkKK0BpbnRlcmZhY2UgV0tDb250ZW50VmlldyAoV0tJbnRlcmFjdGlvblByZXZpZXcp
IDxVSUNvbnRleHRNZW51SW50ZXJhY3Rpb25EZWxlZ2F0ZT4KICNlbHNlCiBAaW50ZXJmYWNlIFdL
Q29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb25QcmV2aWV3KSA8VUlQcmV2aWV3SXRlbURlbGVnYXRl
PgogI2VuZGlmCi0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBzaG91bGRV
c2VQcmV2aWV3Rm9yTG9uZ1ByZXNzOwotCiAtICh2b2lkKV9yZWdpc3RlclByZXZpZXc7CiAtICh2
b2lkKV91bnJlZ2lzdGVyUHJldmlldzsKLQogQGVuZAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmlu
ZGV4IDVjYWNlMDRiZTZlMDg5MWU5YWVjNjkxNGZhMDA2MzM5MzUzYWFmZGYuLmQ4MmY3ZWUyMDY0
OTY5YzFkMTg1OGEwZmQzMTE2NWMzOGJmZDBjZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMjksNiAr
MjksNyBAQAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKICNpbXBvcnQgIkFQSVVJQ2xpZW50
LmgiCisjaW1wb3J0ICJDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJE
b2N1bWVudEVkaXRpbmdDb250ZXh0LmgiCiAjaW1wb3J0ICJFZGl0YWJsZUltYWdlQ29udHJvbGxl
ci5oIgogI2ltcG9ydCAiSW5wdXRWaWV3VXBkYXRlRGVmZXJyZXIuaCIKQEAgLTEwNSw2ICsxMDYs
OSBAQAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9EYXRhRGV0ZWN0b3JzQ29yZVNQSS5oPgogI2lt
cG9ydCA8cGFsL3NwaS9pb3MvRGF0YURldGVjdG9yc1VJU1BJLmg+CiAjaW1wb3J0IDxwYWwvc3Bp
L2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL2lvcy9VSUtpdFNQ
SS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9C
bG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CiAjaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KQEAgLTE1MSw4ICsxNTUsOSBAQCBT
T0ZUX0xJTktfQ0xBU1MoTWFuYWdlZENvbmZpZ3VyYXRpb24sIE1DUHJvZmlsZUNvbm5lY3Rpb24p
OwogU09GVF9MSU5LX0NPTlNUQU5UKE1hbmFnZWRDb25maWd1cmF0aW9uLCBNQ0ZlYXR1cmVEZWZp
bml0aW9uTG9va3VwQWxsb3dlZCwgTlNTdHJpbmcgKikKICNlbmRpZgogCi0jaWYgVVNFKEFQUExF
X0lOVEVSTkFMX1NESykgJiYgX19oYXNfaW5jbHVkZSg8V2ViS2l0QWRkaXRpb25zL1dLSW50ZXJh
Y3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+KQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dLSW50
ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+CisjaWYgSEFWRShMSU5LX1BSRVZJRVcpICYmIFVT
RShVSUNPTlRFWFRNRU5VKQorc3RhdGljIE5TU3RyaW5nICogY29uc3Qgd2Via2l0U2hvd0xpbmtQ
cmV2aWV3c1ByZWZlcmVuY2VLZXkgPSBAIldlYktpdFNob3dMaW5rUHJldmlld3MiOworc3RhdGlj
IE5TU3RyaW5nICogY29uc3Qgd2Via2l0U2hvd0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFuZ2Vk
Tm90aWZpY2F0aW9uID0gQCJXZWJLaXRTaG93TGlua1ByZXZpZXdzUHJlZmVyZW5jZUNoYW5nZWQi
OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXQVRDSE9TKQpAQCAtNzY0LDE0ICs3NjksMTAgQEAg
c3RhdGljIGlubGluZSBib29sIGhhc0ZvY3VzZWRFbGVtZW50KFdlYktpdDo6Rm9jdXNlZEVsZW1l
bnRJbmZvcm1hdGlvbiBmb2N1c2VkRWwKICAgICBbX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVS
ZWNvZ25pemVyIHNldERlbGF5OmhpZ2hsaWdodERlbGF5XTsKICAgICBbX2hpZ2hsaWdodExvbmdQ
cmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOwogCi0jaWYgSEFWRShMSU5L
X1BSRVZJRVcpCi0gICAgaWYgKCFzZWxmLnNob3VsZFVzZVByZXZpZXdGb3JMb25nUHJlc3MpCisj
aWYgSEFWRShMSU5LX1BSRVZJRVcpICYmICFVU0UoVUlDT05URVhUTUVOVSkKKyAgICBbc2VsZiBh
ZGRHZXN0dXJlUmVjb2duaXplcjpfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIu
Z2V0KCldOworICAgIFtzZWxmIF9jcmVhdGVBbmRDb25maWd1cmVMb25nUHJlc3NHZXN0dXJlUmVj
b2duaXplcl07CiAjZW5kaWYKLSAgICB7Ci0gICAgICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25p
emVyOl9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKV07Ci0KLSAgICAg
ICAgW3NlbGYgX2NyZWF0ZUFuZENvbmZpZ3VyZUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyXTsK
LSAgICB9CiAKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAgICBbc2VsZiBzZXR1cERy
YWdBbmREcm9wSW50ZXJhY3Rpb25zXTsKQEAgLTczNjcsNyArNzM2OCw3IEBAIHN0YXRpYyBXZWJF
dmVudEZsYWdzIHdlYkV2ZW50RmxhZ3NGb3JVSUtleU1vZGlmaWVyRmxhZ3MoVUlLZXlNb2RpZmll
ckZsYWdzIGZsYWdzCiAKICNpZiBIQVZFKExJTktfUFJFVklFVykKICAgICBpZiAoW3VzZXJJbnRl
cmZhY2VJdGVtIGlzRXF1YWxUb1N0cmluZzpAImxpbmtQcmV2aWV3UG9wb3ZlckNvbnRlbnRzIl0p
IHsKLSNpZiBVU0UoTE9OR19QUkVTU19GT1JfTElOS19QUkVWSUVXKQorI2lmIFVTRShVSUNPTlRF
WFRNRU5VKQogICAgICAgICByZXR1cm4gQHsgdXNlckludGVyZmFjZUl0ZW06IEB7IEAicGFnZVVS
TCI6IFdURjo6dXNlclZpc2libGVTdHJpbmcoX3Bvc2l0aW9uSW5mb3JtYXRpb24udXJsKSB9IH07
CiAjZWxzZQogICAgICAgICBOU1N0cmluZyAqdXJsID0gW19wcmV2aWV3SXRlbUNvbnRyb2xsZXIg
cHJldmlld0RhdGFdW1VJUHJldmlld0RhdGFMaW5rXTsKQEAgLTc0MTEsMTcgKzc0MTIsNTgyIEBA
IHN0YXRpYyBOU1N0cmluZyAqcHJldmlld0lkZW50aWZpZXJGb3JFbGVtZW50QWN0aW9uKF9XS0Vs
ZW1lbnRBY3Rpb24gKmFjdGlvbikKICAgICByZXR1cm4gbmlsOwogfQogCi0jaWYgVVNFKExPTkdf
UFJFU1NfRk9SX0xJTktfUFJFVklFVykKLSNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvV0tJbnRl
cmFjdGlvblByZXZpZXdBZGRpdGlvbnMubW0+Ci0jZWxzZQorI2lmIFVTRShVSUNPTlRFWFRNRU5V
KQogCiBAaW1wbGVtZW50YXRpb24gV0tDb250ZW50VmlldyAoV0tJbnRlcmFjdGlvblByZXZpZXcp
CiAKLS0gKEJPT0wpc2hvdWxkVXNlUHJldmlld0ZvckxvbmdQcmVzcworLSAodm9pZClfcmVnaXN0
ZXJQcmV2aWV3CiB7Ci0gICAgcmV0dXJuIE5POworICAgIGlmICghX3dlYlZpZXcuYWxsb3dzTGlu
a1ByZXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIF9jb250ZXh0TWVudUludGVyYWN0aW9u
ID0gYWRvcHROUyhbW1VJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBhbGxvY10gaW5pdFdpdGhEZWxl
Z2F0ZTpzZWxmXSk7CisgICAgX2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSA9IE5P
OworICAgIFtzZWxmIGFkZEludGVyYWN0aW9uOl9jb250ZXh0TWVudUludGVyYWN0aW9uLmdldCgp
XTsKKworICAgIFtzZWxmIF9zaG93TGlua1ByZXZpZXdzUHJlZmVyZW5jZUNoYW5nZWQ6bmlsXTsK
KworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3Nob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdl
ZDopIG5hbWU6d2Via2l0U2hvd0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFuZ2VkTm90aWZpY2F0
aW9uIG9iamVjdDpuaWxdOworfQorCistICh2b2lkKV91bnJlZ2lzdGVyUHJldmlldworeworICAg
IGlmICghX2NvbnRleHRNZW51SW50ZXJhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIFtz
ZWxmIHJlbW92ZUludGVyYWN0aW9uOl9jb250ZXh0TWVudUludGVyYWN0aW9uLmdldCgpXTsKKyAg
ICBfY29udGV4dE1lbnVJbnRlcmFjdGlvbiA9IG5pbDsKKworICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOndlYmtpdFNob3dM
aW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKK30K
KworLSAodm9pZClfc2hvd0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFuZ2VkOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIEJvb2xlYW4ga2V5RXhpc3RzQW5kSGFzVmFsaWRG
b3JtYXQgPSBmYWxzZTsKKyAgICBCb29sZWFuIHByZWZWYWx1ZSA9IENGUHJlZmVyZW5jZXNHZXRB
cHBCb29sZWFuVmFsdWUoKF9fYnJpZGdlIENGU3RyaW5nUmVmKXdlYmtpdFNob3dMaW5rUHJldmll
d3NQcmVmZXJlbmNlS2V5LCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRBcHBsaWNhdGlvbiwgJmtleUV4
aXN0c0FuZEhhc1ZhbGlkRm9ybWF0KTsKKyAgICBpZiAoa2V5RXhpc3RzQW5kSGFzVmFsaWRGb3Jt
YXQpCisgICAgICAgIF9zaG93TGlua1ByZXZpZXdzID0gcHJlZlZhbHVlOworICAgIGVsc2UKKyAg
ICAgICAgX3Nob3dMaW5rUHJldmlld3MgPSBZRVM7Cit9CisKK3N0YXRpYyBib29sIG5lZWRzRGVw
cmVjYXRlZFByZXZpZXdBUEkoaWQ8V0tVSURlbGVnYXRlPiBkZWxlZ2F0ZSkKK3sKKyAgICAvLyBG
SVhNRTogUmVwbGFjZSB0aGVzZSB3aXRoIGJvb2xlYW5zIGluIFVJRGVsZWdhdGUuaC4KKyAgICBy
ZXR1cm4gZGVsZWdhdGUKKyAgICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yRWxlbWVudDpjb21wbGV0
aW9uSGFuZGxlcjopXQorICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51Q29uZmlndXJhdGlvbkZvckVsZW1lbnQ6Y29tcGxldGlv
bkhhbmRsZXI6KV0KKyAgICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVGb3JFbGVtZW50OndpbGxDb21taXRXaXRoQW5pbWF0b3I6
KV0KKyAgICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmll
dzpjb250ZXh0TWVudUZvckVsZW1lbnQ6d2lsbENvbW1pdFdpdGhBbmltYXRvcjopXQorICAgICYm
ICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb250ZXh0
TWVudVdpbGxQcmVzZW50Rm9yRWxlbWVudDopXQorICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51V2lsbFByZXNlbnRGb3JFbGVt
ZW50OildCisgICAgJiYgIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93
ZWJWaWV3OmNvbnRleHRNZW51RGlkRW5kRm9yRWxlbWVudDopXQorICAgICYmICFbZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51RGlkRW5kRm9y
RWxlbWVudDopXQorICAgICYmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cih3ZWJWaWV3OnNob3VsZFByZXZpZXdFbGVtZW50OildCisgICAgICAgIHx8IFtkZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6cHJldmlld2luZ1ZpZXdDb250cm9s
bGVyRm9yRWxlbWVudDpkZWZhdWx0QWN0aW9uczopXQorICAgICAgICB8fCBbZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbW1pdFByZXZpZXdpbmdWaWV3Q29u
dHJvbGxlcjopXQorICAgICAgICB8fCBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihfd2ViVmlldzpwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JVUkw6ZGVmYXVsdEFjdGlvbnM6
ZWxlbWVudEluZm86KV0KKyAgICAgICAgfHwgW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3dlYlZpZXc6cHJldmlld1ZpZXdDb250cm9sbGVyRm9yVVJMOildCisgICAgICAg
IHx8IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnByZXZp
ZXdWaWV3Q29udHJvbGxlckZvckltYWdlOmFsdGVybmF0ZVVSTDpkZWZhdWx0QWN0aW9uczplbGVt
ZW50SW5mbzopXSk7Cit9CisKK0FMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCitz
dGF0aWMgTlNBcnJheTxXS1ByZXZpZXdBY3Rpb24gKj4gKndrUHJldmlld0FjdGlvbnNGcm9tRWxl
bWVudEFjdGlvbnMoTlNBcnJheTxfV0tFbGVtZW50QWN0aW9uICo+ICplbGVtZW50QWN0aW9ucywg
X1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKmVsZW1lbnRJbmZvKQoreworICAgIE5TTXV0YWJsZUFy
cmF5PFdLUHJldmlld0FjdGlvbiAqPiAqcHJldmlld0FjdGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXlXaXRoQ2FwYWNpdHk6W2VsZW1lbnRBY3Rpb25zIGNvdW50XV07CisgICAgZm9yIChfV0tF
bGVtZW50QWN0aW9uICplbGVtZW50QWN0aW9uIGluIGVsZW1lbnRBY3Rpb25zKSB7CisgICAgICAg
IFdLUHJldmlld0FjdGlvbiAqcHJldmlld0FjdGlvbiA9IFtXS1ByZXZpZXdBY3Rpb24gYWN0aW9u
V2l0aElkZW50aWZpZXI6cHJldmlld0lkZW50aWZpZXJGb3JFbGVtZW50QWN0aW9uKGVsZW1lbnRB
Y3Rpb24pIHRpdGxlOmVsZW1lbnRBY3Rpb24udGl0bGUgc3R5bGU6VUlQcmV2aWV3QWN0aW9uU3R5
bGVEZWZhdWx0IGhhbmRsZXI6XihVSVByZXZpZXdBY3Rpb24gKiwgVUlWaWV3Q29udHJvbGxlciAq
KSB7CisgICAgICAgICAgICBbZWxlbWVudEFjdGlvbiBydW5BY3Rpb25XaXRoRWxlbWVudEluZm86
ZWxlbWVudEluZm9dOworICAgICAgICB9XTsKKyAgICAgICAgcHJldmlld0FjdGlvbi5pbWFnZSA9
IFtfV0tFbGVtZW50QWN0aW9uIGltYWdlRm9yRWxlbWVudEFjdGlvblR5cGU6ZWxlbWVudEFjdGlv
bi50eXBlXTsKKyAgICAgICAgW3ByZXZpZXdBY3Rpb25zIGFkZE9iamVjdDpwcmV2aWV3QWN0aW9u
XTsKKyAgICB9CisgICAgcmV0dXJuIHByZXZpZXdBY3Rpb25zOworfQorCitzdGF0aWMgVUlBY3Rp
b24gKnVpQWN0aW9uRm9yUHJldmlld0FjdGlvbihVSVByZXZpZXdBY3Rpb24gKnByZXZpZXdBY3Rp
b24sIFVJVmlld0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJvbGxlcikKK3sKKyAgICAvLyBV
SVByZXZpZXdBY3Rpb25JdGVtLmltYWdlIGlzIFNQSSwgc28gbm8gZXh0ZXJuYWwgY2xpZW50cyB3
aWxsIGJlIGFibGUKKyAgICAvLyB0byBwcm92aWRlIGdseXBocyBmb3IgYWN0aW9ucyA8cmRhcjov
L3Byb2JsZW0vNTAxNTE4NTU+LgorICAgIC8vIEhvd2V2ZXIsIHRoZXkgc2hvdWxkIG1pZ3JhdGUg
dG8gdGhlIG5ldyBBUEkuCisKKyAgICByZXR1cm4gW1VJQWN0aW9uIGFjdGlvbldpdGhUaXRsZTpw
cmV2aWV3QWN0aW9uLnRpdGxlIGltYWdlOnByZXZpZXdBY3Rpb24uaW1hZ2UgaWRlbnRpZmllcjpu
aWwgaGFuZGxlcjpeKFVJQWN0aW9uICphY3Rpb24pIHsKKyAgICAgICAgcHJldmlld0FjdGlvbi5o
YW5kbGVyKHByZXZpZXdBY3Rpb24sIHByZXZpZXdWaWV3Q29udHJvbGxlcik7CisgICAgfV07Cit9
CitBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKworc3RhdGljIE5TQXJyYXk8VUlN
ZW51RWxlbWVudCAqPiAqbWVudUVsZW1lbnRzRnJvbVByZXZpZXdPckRlZmF1bHRzKFVJVmlld0Nv
bnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJvbGxlciwgY29uc3QgUmV0YWluUHRyPE5TQXJyYXk+
JiBkZWZhdWx0RWxlbWVudEFjdGlvbnMsIFJldGFpblB0cjxfV0tBY3RpdmF0ZWRFbGVtZW50SW5m
bz4gZWxlbWVudEluZm8pCit7CisgICAgYXV0byBhY3Rpb25zID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5V2l0aENhcGFjaXR5OmRlZmF1bHRFbGVtZW50QWN0aW9ucy5nZXQoKS5jb3VudF07CisKKyAg
ICAvLyBPbmUgb2YgdGhlIGRlbGVnYXRlcyBtYXkgaGF2ZSBwcm92aWRlZCBhIFVJVmlld0NvbnRy
b2xsZXIgd2l0aCBhIHByZXZpZXdBY3Rpb25JdGVtcyBhcnJheS4gSWYgc28sCisgICAgLy8gd2Ug
bmVlZCB0byBjb252ZXJ0IGVhY2ggVUlQcmV2aWV3QWN0aW9uSXRlbSBpbnRvIGEgVUlBY3Rpb24u
CisgICAgaWYgKHByZXZpZXdWaWV3Q29udHJvbGxlcikgeworICAgICAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBOU0FycmF5PGlkPFVJUHJldmlld0FjdGlv
bkl0ZW0+PiAqcHJldmlld0FjdGlvbnMgPSBwcmV2aWV3Vmlld0NvbnRyb2xsZXIucHJldmlld0Fj
dGlvbkl0ZW1zOworICAgICAgICBmb3IgKFVJUHJldmlld0FjdGlvbiAqcHJldmlld0FjdGlvbiBp
biBwcmV2aWV3QWN0aW9ucykKKyAgICAgICAgICAgIFthY3Rpb25zIGFkZE9iamVjdDp1aUFjdGlv
bkZvclByZXZpZXdBY3Rpb24ocHJldmlld0FjdGlvbiwgcHJldmlld1ZpZXdDb250cm9sbGVyKV07
CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgIH0KKworICAg
IGlmICghW2FjdGlvbnMgY291bnRdKSB7CisgICAgICAgIC8vIFdlIGVpdGhlciBkaWRuJ3QgZ2V0
IGEgY3VzdG9tIHByZXZpZXcgVUlWaWV3Q29udHJvbGxlciwgb3IgaXQgZGlkbid0IHByb3ZpZGUg
YW55IGFjdGlvbnMKKyAgICAgICAgLy8gc28gd2Ugc2hvdWxkIHVzZSB0aGUgZGVmYXVsdCBzZXQu
CisgICAgICAgIGZvciAoX1dLRWxlbWVudEFjdGlvbiAqZWxlbWVudEFjdGlvbiBpbiBkZWZhdWx0
RWxlbWVudEFjdGlvbnMuZ2V0KCkpIHsKKyAgICAgICAgICAgIFVJSW1hZ2UgKmltYWdlID0gW19X
S0VsZW1lbnRBY3Rpb24gaW1hZ2VGb3JFbGVtZW50QWN0aW9uVHlwZTplbGVtZW50QWN0aW9uLnR5
cGVdOworCisgICAgICAgICAgICBbYWN0aW9ucyBhZGRPYmplY3Q6W1VJQWN0aW9uIGFjdGlvbldp
dGhUaXRsZTplbGVtZW50QWN0aW9uLnRpdGxlIGltYWdlOmltYWdlIGlkZW50aWZpZXI6bmlsIGhh
bmRsZXI6XihVSUFjdGlvbiAqKSB7CisgICAgICAgICAgICAgICAgW2VsZW1lbnRBY3Rpb24gcnVu
QWN0aW9uV2l0aEVsZW1lbnRJbmZvOmVsZW1lbnRJbmZvLmdldCgpXTsKKyAgICAgICAgICAgIH1d
XTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhY3Rpb25zOworfQorCitzdGF0aWMg
VUlNZW51ICptZW51RnJvbVByZXZpZXdPckRlZmF1bHRzKFVJVmlld0NvbnRyb2xsZXIgKnByZXZp
ZXdWaWV3Q29udHJvbGxlciwgY29uc3QgUmV0YWluUHRyPE5TQXJyYXk+JiBkZWZhdWx0RWxlbWVu
dEFjdGlvbnMsIFJldGFpblB0cjxfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbz4gZWxlbWVudEluZm8s
IE5TU3RyaW5nICp0aXRsZSkKK3sKKyAgICBhdXRvIGFjdGlvbnMgPSBtZW51RWxlbWVudHNGcm9t
UHJldmlld09yRGVmYXVsdHMocHJldmlld1ZpZXdDb250cm9sbGVyLCBkZWZhdWx0RWxlbWVudEFj
dGlvbnMsIGVsZW1lbnRJbmZvKTsKKyAgICByZXR1cm4gW1VJTWVudSBtZW51V2l0aFRpdGxlOnRp
dGxlIGNoaWxkcmVuOmFjdGlvbnNdOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnRpdGxlRm9yTWVu
dShib29sIGlzTGluaywgYm9vbCBzaG93TGlua1ByZXZpZXdzLCBjb25zdCBVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBpZiAoaXNMaW5rICYmICFzaG93TGlua1ByZXZpZXdz
KSB7CisgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKFdURjo6
cHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV0VCX1VJ
X1NUUklOR19LRVkoIkphdmFTY3JpcHQiLCAiSmF2YVNjcmlwdCBBY3Rpb24gU2hlZXQgVGl0bGUi
LCAiVGl0bGUgZm9yIGFjdGlvbiBzaGVldCBmb3IgSmF2YVNjcmlwdCBsaW5rIik7CisgICAgICAg
ICAgICByZXR1cm4gV1RGOjp1c2VyVmlzaWJsZVN0cmluZyh1cmwpOworICAgICAgICB9CisgICAg
fSBlbHNlIGlmICghaXNMaW5rICYmICF0aXRsZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0
aXRsZTsKKworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpYXNzaWduTGVnYWN5RGF0YUZv
ckNvbnRleHRNZW51SW50ZXJhY3Rpb24KK3sKKyAgICBBU1NFUlQoIV9jb250ZXh0TWVudUhhc1Jl
cXVlc3RlZExlZ2FjeURhdGEpOworICAgIGlmIChfY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdh
Y3lEYXRhKQorICAgICAgICByZXR1cm47CisgICAgX2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVn
YWN5RGF0YSA9IFlFUzsKKworICAgIGlmICghX3dlYlZpZXcpCisgICAgICAgIHJldHVybjsKKyAg
ICBhdXRvIHVpRGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxpZDxXS1VJRGVsZWdhdGVQcml2YXRlPj4o
X3dlYlZpZXcuVUlEZWxlZ2F0ZSk7CisgICAgaWYgKCF1aURlbGVnYXRlKQorICAgICAgICByZXR1
cm47CisKKyAgICBjb25zdCBhdXRvJiB1cmwgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi51cmw7CisK
KyAgICBfcGFnZS0+c3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50QXRQb3NpdGlvbihfcG9zaXRp
b25JbmZvcm1hdGlvbi5yZXF1ZXN0LnBvaW50KTsKKworICAgIFVJVmlld0NvbnRyb2xsZXIgKnBy
ZXZpZXdWaWV3Q29udHJvbGxlciA9IG5pbDsKKworICAgIGF1dG8gZWxlbWVudEluZm8gPSBhZG9w
dE5TKFtbX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gYWxsb2NdIF9pbml0V2l0aEludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uOl9wb3NpdGlvbkluZm9ybWF0aW9uXSk7CisKKyAgICBpZiAo
X3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rKSB7CisgICAgICAgIF9sb25nUHJlc3NDYW5DbGlj
ayA9IE5POworCisgICAgICAgIFJldGFpblB0cjxOU0FycmF5PF9XS0VsZW1lbnRBY3Rpb24gKj4+
IGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudCA9IFtfYWN0aW9uU2hlZXRBc3Npc3RhbnQgZGVm
YXVsdEFjdGlvbnNGb3JMaW5rU2hlZXQ6ZWxlbWVudEluZm8uZ2V0KCldOworCisgICAgICAgIC8v
IEZJWE1FOiBBbmltYXRlZCBpbWFnZXMgZ28gaGVyZS4KKworICAgICAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnByZXZpZXdpbmdWaWV3Q29udHJvbGxlckZvckVs
ZW1lbnQ6ZGVmYXVsdEFjdGlvbnM6KV0pIHsKKyAgICAgICAgICAgIGF1dG8gZGVmYXVsdEFjdGlv
bnMgPSB3a1ByZXZpZXdBY3Rpb25zRnJvbUVsZW1lbnRBY3Rpb25zKGRlZmF1bHRBY3Rpb25zRnJv
bUFzc2lzdGFudC5nZXQoKSwgZWxlbWVudEluZm8uZ2V0KCkpOworICAgICAgICAgICAgYXV0byBw
cmV2aWV3RWxlbWVudEluZm8gPSBhZG9wdE5TKFtbV0tQcmV2aWV3RWxlbWVudEluZm8gYWxsb2Nd
IF9pbml0V2l0aExpbmtVUkw6dXJsXSk7CisgICAgICAgICAgICBwcmV2aWV3Vmlld0NvbnRyb2xs
ZXIgPSBbdWlEZWxlZ2F0ZSB3ZWJWaWV3Ol93ZWJWaWV3IHByZXZpZXdpbmdWaWV3Q29udHJvbGxl
ckZvckVsZW1lbnQ6cHJldmlld0VsZW1lbnRJbmZvLmdldCgpIGRlZmF1bHRBY3Rpb25zOmRlZmF1
bHRBY3Rpb25zXTsKKyAgICAgICAgfSBlbHNlIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnByZXZpZXdWaWV3Q29udHJvbGxlckZvclVSTDpkZWZh
dWx0QWN0aW9uczplbGVtZW50SW5mbzopXSkKKyAgICAgICAgICAgIHByZXZpZXdWaWV3Q29udHJv
bGxlciA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IHByZXZpZXdWaWV3Q29udHJvbGxl
ckZvclVSTDp1cmwgZGVmYXVsdEFjdGlvbnM6ZGVmYXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50Lmdl
dCgpIGVsZW1lbnRJbmZvOmVsZW1lbnRJbmZvLmdldCgpXTsKKyAgICAgICAgZWxzZSBpZiAoW3Vp
RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpwcmV2aWV3Vmll
d0NvbnRyb2xsZXJGb3JVUkw6KV0pCisgICAgICAgICAgICBwcmV2aWV3Vmlld0NvbnRyb2xsZXIg
PSBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JV
Ukw6dXJsXTsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisKKyNp
ZiBVU0UoREFUQV9ERVRFQ1RPUlNfRk9SX0RFRkFVTFRfUFJFVklFVykKKyAgICAgICAgLy8gUHJl
dmlvdXNseSwgVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgd291bGQgZGV0ZWN0IHRoZSBjYXNlIHdo
ZXJlIHRoZXJlIHdhcyBubyBwcmV2aWV3Vmlld0NvbnRyb2xsZXIKKyAgICAgICAgLy8gYW5kIGNy
ZWF0ZSBvbmUuIFdlIG5lZWQgdG8gcmVwbGljYXRlIHRoaXMgY29kZSBmb3IgdGhlIG5ldyBBUEku
CisgICAgICAgIGlmICghcHJldmlld1ZpZXdDb250cm9sbGVyKSB7CisgICAgICAgICAgICBhdXRv
IGRkQ29udGV4dE1lbnVBY3Rpb25DbGFzcyA9IGdldEREQ29udGV4dE1lbnVBY3Rpb25DbGFzcygp
OworICAgICAgICAgICAgaWYgKFtkZENvbnRleHRNZW51QWN0aW9uQ2xhc3MgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JVUkw6aWRlbnRpZmll
cjpzZWxlY3RlZFRleHQ6cmVzdWx0czppblZpZXc6Y29udGV4dDptZW51SWRlbnRpZmllcjopXSkg
eworICAgICAgICAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAgICAg
ICAgICAgICBOU0RpY3Rpb25hcnkgKmNvbnRleHQgPSBbc2VsZiBkYXRhRGV0ZWN0aW9uQ29udGV4
dEZvclBvc2l0aW9uSW5mb3JtYXRpb246X3Bvc2l0aW9uSW5mb3JtYXRpb25dOworICAgICAgICAg
ICAgICAgIFJldGFpblB0cjxVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbj4gZGF0YURldGVjdG9y
c1Jlc3VsdCA9IFtkZENvbnRleHRNZW51QWN0aW9uQ2xhc3MgY29udGV4dE1lbnVDb25maWd1cmF0
aW9uRm9yVVJMOnVybCBpZGVudGlmaWVyOl9wb3NpdGlvbkluZm9ybWF0aW9uLmRhdGFEZXRlY3Rv
cklkZW50aWZpZXIgc2VsZWN0ZWRUZXh0OnNlbGYuc2VsZWN0ZWRUZXh0IHJlc3VsdHM6X3Bvc2l0
aW9uSW5mb3JtYXRpb24uZGF0YURldGVjdG9yUmVzdWx0cy5nZXQoKSBpblZpZXc6c2VsZiBjb250
ZXh0OmNvbnRleHQgbWVudUlkZW50aWZpZXI6bmlsXTsKKyAgICAgICAgICAgICAgICBpZiAoX3No
b3dMaW5rUHJldmlld3MgJiYgZGF0YURldGVjdG9yc1Jlc3VsdCAmJiBkYXRhRGV0ZWN0b3JzUmVz
dWx0LmdldCgpLnByZXZpZXdQcm92aWRlcikKKyAgICAgICAgICAgICAgICAgICAgX2NvbnRleHRN
ZW51TGVnYWN5UHJldmlld0NvbnRyb2xsZXIgPSBkYXRhRGV0ZWN0b3JzUmVzdWx0LmdldCgpLnBy
ZXZpZXdQcm92aWRlcigpOworICAgICAgICAgICAgICAgIGlmIChkYXRhRGV0ZWN0b3JzUmVzdWx0
ICYmIGRhdGFEZXRlY3RvcnNSZXN1bHQuZ2V0KCkuYWN0aW9uUHJvdmlkZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBtZW51RWxlbWVudHMgPSBtZW51RWxlbWVudHNGcm9tUHJldmlld09y
RGVmYXVsdHMobmlsLCBkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQsIGVsZW1lbnRJbmZvKTsK
KyAgICAgICAgICAgICAgICAgICAgX2NvbnRleHRNZW51TGVnYWN5TWVudSA9IGRhdGFEZXRlY3Rv
cnNSZXN1bHQuZ2V0KCkuYWN0aW9uUHJvdmlkZXIobWVudUVsZW1lbnRzKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAg
ICAgYXV0byBtZW51VGl0bGUgPSB0aXRsZUZvck1lbnUodHJ1ZSwgX3Nob3dMaW5rUHJldmlld3Ms
IHVybCwgX3Bvc2l0aW9uSW5mb3JtYXRpb24udGl0bGUpOworICAgICAgICBfY29udGV4dE1lbnVM
ZWdhY3lNZW51ID0gbWVudUZyb21QcmV2aWV3T3JEZWZhdWx0cyhwcmV2aWV3Vmlld0NvbnRyb2xs
ZXIsIGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudCwgZWxlbWVudEluZm8sIG1lbnVUaXRsZSk7
CisKKyAgICB9IGVsc2UgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmlzSW1hZ2UpIHsKKyAgICAg
ICAgTlNVUkwgKm5zVVJMID0gKE5TVVJMICopdXJsOworICAgICAgICBSZXRhaW5QdHI8TlNEaWN0
aW9uYXJ5PiBpbWFnZUluZm87CisgICAgICAgIEFTU0VSVChfcG9zaXRpb25JbmZvcm1hdGlvbi5p
bWFnZSk7CisgICAgICAgIGF1dG8gY2dJbWFnZSA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdl
LT5tYWtlQ0dJbWFnZUNvcHkoKTsKKyAgICAgICAgYXV0byB1aUltYWdlID0gYWRvcHROUyhbW1VJ
SW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpjZ0ltYWdlLmdldCgpXSk7CisKKyAgICAgICAg
aWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6YWx0
ZXJuYXRlVVJMRnJvbUltYWdlOnVzZXJJbmZvOildKSB7CisgICAgICAgICAgICBOU0RpY3Rpb25h
cnkgKnVzZXJJbmZvOworICAgICAgICAgICAgbnNVUkwgPSBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpf
d2ViVmlldyBhbHRlcm5hdGVVUkxGcm9tSW1hZ2U6dWlJbWFnZS5nZXQoKSB1c2VySW5mbzomdXNl
ckluZm9dOworICAgICAgICAgICAgaW1hZ2VJbmZvID0gdXNlckluZm87CisgICAgICAgIH0KKwor
ICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBpZiAo
W3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzp3aWxsUHJl
dmlld0ltYWdlV2l0aFVSTDopXSkKKyAgICAgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93
ZWJWaWV3IHdpbGxQcmV2aWV3SW1hZ2VXaXRoVVJMOl9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdl
VVJMXTsKKworICAgICAgICBSZXRhaW5QdHI8TlNBcnJheTxfV0tFbGVtZW50QWN0aW9uICo+PiBk
ZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQgPSBbX2FjdGlvblNoZWV0QXNzaXN0YW50IGRlZmF1
bHRBY3Rpb25zRm9ySW1hZ2VTaGVldDplbGVtZW50SW5mby5nZXQoKV07CisKKyAgICAgICAgaWYg
KGltYWdlSW5mbyAmJiBbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93
ZWJWaWV3OnByZXZpZXdWaWV3Q29udHJvbGxlckZvckltYWdlOmFsdGVybmF0ZVVSTDpkZWZhdWx0
QWN0aW9uczplbGVtZW50SW5mbzopXSkKKyAgICAgICAgICAgIHByZXZpZXdWaWV3Q29udHJvbGxl
ciA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IHByZXZpZXdWaWV3Q29udHJvbGxlckZv
ckltYWdlOnVpSW1hZ2UuZ2V0KCkgYWx0ZXJuYXRlVVJMOm5zVVJMIGRlZmF1bHRBY3Rpb25zOmRl
ZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudC5nZXQoKSBlbGVtZW50SW5mbzplbGVtZW50SW5mby5n
ZXQoKV07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByZXZpZXdWaWV3Q29udHJvbGxlciA9
IFtbV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmNn
SW1hZ2UgZGVmYXVsdEFjdGlvbnM6ZGVmYXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50LmdldCgpIGVs
ZW1lbnRJbmZvOmVsZW1lbnRJbmZvLmdldCgpXTsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfRU5ECisKKyAgICAgICAgYXV0byBtZW51VGl0bGUgPSB0aXRsZUZvck1lbnUo
ZmFsc2UsIF9zaG93TGlua1ByZXZpZXdzLCB1cmwsIF9wb3NpdGlvbkluZm9ybWF0aW9uLnRpdGxl
KTsKKyAgICAgICAgX2NvbnRleHRNZW51TGVnYWN5TWVudSA9IG1lbnVGcm9tUHJldmlld09yRGVm
YXVsdHMocHJldmlld1ZpZXdDb250cm9sbGVyLCBkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQs
IGVsZW1lbnRJbmZvLCBtZW51VGl0bGUpOworICAgIH0KKworICAgIF9jb250ZXh0TWVudUxlZ2Fj
eVByZXZpZXdDb250cm9sbGVyID0gX3Nob3dMaW5rUHJldmlld3MgPyBwcmV2aWV3Vmlld0NvbnRy
b2xsZXIgOiBudWxscHRyOwogfQogCistIChVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiAqKWNv
bnRleHRNZW51SW50ZXJhY3Rpb246KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWludGVyYWN0
aW9uIGNvbmZpZ3VyYXRpb25Gb3JNZW51QXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbgorewor
ICAgIC8vIFJlcXVpcmVkIHRvIGNvbmZvcm0gdG8gVUlDb250ZXh0TWVudUludGVyYWN0aW9uRGVs
ZWdhdGUsIGJ1dCBTUEkgdmVyc2lvbiBzaG91bGQgYmUgY2FsbGVkIGluc3RlYWQuCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClfY29udGV4
dE1lbnVJbnRlcmFjdGlvbjooVUlDb250ZXh0TWVudUludGVyYWN0aW9uICopaW50ZXJhY3Rpb24g
Y29uZmlndXJhdGlvbkZvck1lbnVBdExvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uIGNvbXBsZXRp
b246KHZvaWQoXikoVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKikpY29tcGxldGlvbgorewor
ICAgIGlmICghX3dlYlZpZXcpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisKKyAg
ICBjb25zdCBhdXRvIHBvc2l0aW9uID0gW2ludGVyYWN0aW9uIGxvY2F0aW9uSW5WaWV3OnNlbGZd
OworICAgIFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QgcmVxdWVzdCB7IFdl
YkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb3NpdGlvbikgfTsKKyAgICByZXF1ZXN0LmluY2x1ZGVT
bmFwc2hvdCA9IHRydWU7CisgICAgcmVxdWVzdC5pbmNsdWRlTGlua0luZGljYXRvciA9IHRydWU7
CisKKyAgICBbc2VsZiBkb0FmdGVyUG9zaXRpb25JbmZvcm1hdGlvblVwZGF0ZTpbd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS0NvbnRlbnRWaWV3PihzZWxmKSwgY29tcGxldGlvbiA9IG1ha2VCbG9j
a1B0cihjb21wbGV0aW9uKV0gKFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24pIHsKKyAgICAgICAgYXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAg
IGlmICghc3Ryb25nU2VsZikKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7Cisg
ICAgICAgIFtzdHJvbmdTZWxmIGNvbnRpbnVlQ29udGV4dE1lbnVJbnRlcmFjdGlvbjpjb21wbGV0
aW9uLmdldCgpXTsKKyAgICB9IGZvclJlcXVlc3Q6cmVxdWVzdF07Cit9CisKKy0gKHZvaWQpY29u
dGludWVDb250ZXh0TWVudUludGVyYWN0aW9uOih2b2lkKF4pKFVJQ29udGV4dE1lbnVDb25maWd1
cmF0aW9uICopKWNvbXBsZXRpb24KK3sKKyAgICBpZiAoIV9wb3NpdGlvbkluZm9ybWF0aW9uLmlz
TGluayAmJiAhX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNJbWFnZSAmJiAhX3Bvc2l0aW9uSW5mb3Jt
YXRpb24uaXNBdHRhY2htZW50KQorICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworCisg
ICAgVVJMIGxpbmtVUkwgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi51cmw7CisKKyAgICBpZiAoX3Bv
c2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rICYmIGxpbmtVUkwuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbihuaWwpOworCisgICAgYXV0byB1aURlbGVnYXRlID0gc3RhdGljX2Nh
c3Q8aWQ8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KF93ZWJWaWV3LlVJRGVsZWdhdGUpOworICAgIGlm
ICghdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24obmlsKTsKKworICAgIGlm
IChuZWVkc0RlcHJlY2F0ZWRQcmV2aWV3QVBJKHVpRGVsZWdhdGUpKSB7CisKKyAgICAgICAgaWYg
KF9wb3NpdGlvbkluZm9ybWF0aW9uLmlzTGluaykgeworICAgICAgICAgICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkUHJldmlld0VsZW1lbnQ6KV0p
IHsKKyAgICAgICAgICAgICAgICBhdXRvIHByZXZpZXdFbGVtZW50SW5mbyA9IGFkb3B0TlMoW1tX
S1ByZXZpZXdFbGVtZW50SW5mbyBhbGxvY10gX2luaXRXaXRoTGlua1VSTDpsaW5rVVJMXSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFbdWlEZWxlZ2F0ZSB3ZWJWaWV3Ol93ZWJWaWV3IHNob3VsZFBy
ZXZpZXdFbGVtZW50OnByZXZpZXdFbGVtZW50SW5mby5nZXQoKV0pCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKworICAgICAgICAgICAgLy8gRklYTUU6
IFN1cHBvcnQgSmF2YVNjcmlwdCB1cmxzIGhlcmUuIEJ1dCBtYWtlIHN1cmUgdGhleSBkb24ndCBz
aG93IGEgcHJldmlldy4KKyAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81MDU3MjI4Mz4K
KyAgICAgICAgICAgIGlmICghbGlua1VSTC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKKyNp
ZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgICAgICAgICAgICAgaWYgKCFXZWJDb3JlOjpE
YXRhRGV0ZWN0aW9uOjpjYW5CZVByZXNlbnRlZEJ5RGF0YURldGVjdG9ycyhsaW5rVVJMKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24obmlsKTsKKyNlbmRpZgorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgX2NvbnRleHRNZW51TGVnYWN5UHJldmlld0Nv
bnRyb2xsZXIgPSBudWxscHRyOworICAgICAgICBfY29udGV4dE1lbnVMZWdhY3lNZW51ID0gbnVs
bHB0cjsKKyAgICAgICAgX2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSA9IE5POwor
CisgICAgICAgIFVJQ29udGV4dE1lbnVBY3Rpb25Qcm92aWRlciBhY3Rpb25NZW51UHJvdmlkZXIg
PSBbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS0NvbnRlbnRWaWV3PihzZWxmKV0gKE5TQXJyYXk8
VUlNZW51RWxlbWVudCAqPiAqc3VnZ2VzdGVkQWN0aW9ucykgLT4gVUlNZW51ICogeworICAgICAg
ICAgICAgYXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgICAgICBpZiAo
IXN0cm9uZ1NlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIGlm
ICghc3Ryb25nU2VsZi0+X2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSkKKyAgICAg
ICAgICAgICAgICBbc3Ryb25nU2VsZiBhc3NpZ25MZWdhY3lEYXRhRm9yQ29udGV4dE1lbnVJbnRl
cmFjdGlvbl07CisKKyAgICAgICAgICAgIHJldHVybiBzdHJvbmdTZWxmLT5fY29udGV4dE1lbnVM
ZWdhY3lNZW51LmdldCgpOworICAgICAgICB9OworCisgICAgICAgIFVJQ29udGV4dE1lbnVDb250
ZW50UHJldmlld1Byb3ZpZGVyIGNvbnRlbnRQcmV2aWV3UHJvdmlkZXIgPSBbd2Vha1NlbGYgPSBX
ZWFrT2JqQ1B0cjxXS0NvbnRlbnRWaWV3PihzZWxmKV0gKCkgLT4gVUlWaWV3Q29udHJvbGxlciAq
IHsKKyAgICAgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAg
ICAgICAgaWYgKCFzdHJvbmdTZWxmKQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAg
ICAgICAgICBpZiAoIXN0cm9uZ1NlbGYtPl9jb250ZXh0TWVudUhhc1JlcXVlc3RlZExlZ2FjeURh
dGEpCisgICAgICAgICAgICAgICAgW3N0cm9uZ1NlbGYgYXNzaWduTGVnYWN5RGF0YUZvckNvbnRl
eHRNZW51SW50ZXJhY3Rpb25dOworCisgICAgICAgICAgICByZXR1cm4gc3Ryb25nU2VsZi0+X2Nv
bnRleHRNZW51TGVnYWN5UHJldmlld0NvbnRyb2xsZXIuZ2V0KCk7CisgICAgICAgIH07CisKKyAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBwcm92aWRlIGFuIGlkZW50aWZpZXIgYW5kIEFTU0VS
VCBpbiBkZWxlZ2F0ZXMgaWYgd2UgZG9uJ3QgbWF0Y2g/CisgICAgICAgIHJldHVybiBjb21wbGV0
aW9uKFtVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uV2l0aElkZW50aWZp
ZXI6bmlsIHByZXZpZXdQcm92aWRlcjpjb250ZW50UHJldmlld1Byb3ZpZGVyIGFjdGlvblByb3Zp
ZGVyOmFjdGlvbk1lbnVQcm92aWRlcl0pOworICAgIH0KKworICAgIGF1dG8gY29tcGxldGlvbkJs
b2NrID0gbWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24p
LCBsaW5rVVJMID0gV1RGTW92ZShsaW5rVVJMKSwgd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS0Nv
bnRlbnRWaWV3PihzZWxmKV0gKFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uRnJvbVdLVUlEZWxlZ2F0ZSkgbXV0YWJsZSB7CisKKyAgICAgICAgYXV0byBzdHJvbmdTZWxm
ID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGlmICghc3Ryb25nU2VsZikKKyAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisKKyAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uRnJv
bVdLVUlEZWxlZ2F0ZSkgeworCisgICAgICAgICAgICBzdHJvbmdTZWxmLT5fY29udGV4dE1lbnVF
bGVtZW50SW5mbyA9IG5pbDsKKworICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZl
IGFuIG9iamVjdCB3ZSBtaWdodCB3YW50IHRvIHNob3cgYSBjb250ZXh0IG1lbnUgZm9yLCBidXQg
dGhlCisgICAgICAgICAgICAvLyBjbGllbnQgd2FzIHVuYWJsZSB0byBoYW5kbGUgaXQuIEJlZm9y
ZSBnaXZpbmcgdXAsIHdlIGFzayBEYXRhRGV0ZWN0b3JzLgorCisjaWYgRU5BQkxFKERBVEFfREVU
RUNUSU9OKQorICAgICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgSmF2YVNjcmlwdCB1cmxzIGhl
cmUuIEJ1dCBtYWtlIHN1cmUgdGhleSBkb24ndCBzaG93IGEgcHJldmlldy4KKyAgICAgICAgICAg
IC8vIDxyZGFyOi8vcHJvYmxlbS81MDU3MjI4Mz4KKyAgICAgICAgICAgIGlmICghbGlua1VSTC5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkgJiYgIVdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmNhbkJl
UHJlc2VudGVkQnlEYXRhRGV0ZWN0b3JzKGxpbmtVUkwpKQorICAgICAgICAgICAgICAgIHJldHVy
biBjb21wbGV0aW9uKG5pbCk7CisKKyAgICAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKKyAgICAgICAgICAgIGF1dG8gZGRDb250ZXh0TWVudUFjdGlvbkNsYXNzID0gZ2V0RERD
b250ZXh0TWVudUFjdGlvbkNsYXNzKCk7CisgICAgICAgICAgICBpZiAoW2RkQ29udGV4dE1lbnVB
Y3Rpb25DbGFzcyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbnRleHRNZW51Q29uZmln
dXJhdGlvbldpdGhVUkw6aW5WaWV3OmNvbnRleHQ6bWVudUlkZW50aWZpZXI6KV0pIHsKKyAgICAg
ICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmNvbnRleHQgPSBbc3Ryb25nU2VsZiBkYXRhRGV0ZWN0
aW9uQ29udGV4dEZvclBvc2l0aW9uSW5mb3JtYXRpb246c3Ryb25nU2VsZi0+X3Bvc2l0aW9uSW5m
b3JtYXRpb25dOworICAgICAgICAgICAgICAgIFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uICpj
b25maWd1cmF0aW9uRnJvbUREID0gW2RkQ29udGV4dE1lbnVBY3Rpb25DbGFzcyBjb250ZXh0TWVu
dUNvbmZpZ3VyYXRpb25Gb3JVUkw6bGlua1VSTCBpZGVudGlmaWVyOnN0cm9uZ1NlbGYtPl9wb3Np
dGlvbkluZm9ybWF0aW9uLmRhdGFEZXRlY3RvcklkZW50aWZpZXIgc2VsZWN0ZWRUZXh0OltzdHJv
bmdTZWxmIHNlbGVjdGVkVGV4dF0gcmVzdWx0czpzdHJvbmdTZWxmLT5fcG9zaXRpb25JbmZvcm1h
dGlvbi5kYXRhRGV0ZWN0b3JSZXN1bHRzLmdldCgpIGluVmlldzpzdHJvbmdTZWxmLmdldCgpIGNv
bnRleHQ6Y29udGV4dCBtZW51SWRlbnRpZmllcjpuaWxdOworICAgICAgICAgICAgICAgIGlmIChz
dHJvbmdTZWxmLT5fc2hvd0xpbmtQcmV2aWV3cykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb24oY29uZmlndXJhdGlvbkZyb21ERCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb24oW1VJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb25XaXRo
SWRlbnRpZmllcjpbY29uZmlndXJhdGlvbkZyb21ERCBpZGVudGlmaWVyXSBwcmV2aWV3UHJvdmlk
ZXI6W2NvbmZpZ3VyYXRpb25Gcm9tREQgcHJldmlld1Byb3ZpZGVyXSBhY3Rpb25Qcm92aWRlcjpb
Y29uZmlndXJhdGlvbkZyb21ERCBhY3Rpb25Qcm92aWRlcl1dKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisjZW5kaWYKKyAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisgICAgICAgIH0KKworICAgICAgICBpZDxOU0NvcHlp
bmc+IGlkZW50aWZpZXIgPSBbY29uZmlndXJhdGlvbkZyb21XS1VJRGVsZWdhdGUgaWRlbnRpZmll
cl07CisgICAgICAgIFVJQ29udGV4dE1lbnVDb250ZW50UHJldmlld1Byb3ZpZGVyIGNvbnRlbnRQ
cmV2aWV3UHJvdmlkZXIgPSBbY29uZmlndXJhdGlvbkZyb21XS1VJRGVsZWdhdGUgcHJldmlld1By
b3ZpZGVyXTsKKyAgICAgICAgVUlDb250ZXh0TWVudUFjdGlvblByb3ZpZGVyIGFjdGlvbk1lbnVQ
cm92aWRlciA9IFtjb25maWd1cmF0aW9uRnJvbVdLVUlEZWxlZ2F0ZSBhY3Rpb25Qcm92aWRlcl07
CisKKyAgICAgICAgYXV0byBhY3Rpb25Qcm92aWRlcldyYXBwZXIgPSBbYWN0aW9uUHJvdmlkZXJG
cm9tVUlEZWxlZ2F0ZSA9IG1ha2VCbG9ja1B0cihhY3Rpb25NZW51UHJvdmlkZXIpLCB3ZWFrU2Vs
ZiA9IFdURk1vdmUod2Vha1NlbGYpXSAoTlNBcnJheTxVSU1lbnVFbGVtZW50ICo+ICpzdWdnZXN0
ZWRBY3Rpb25zKSAtPiBVSU1lbnUgKiB7CisgICAgICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3
ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgICAgIGlmICghc3Ryb25nU2VsZikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAgICBhdXRvIGVsZW1lbnRJbmZvID0gYWRvcHRO
UyhbW19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvIGFsbG9jXSBfaW5pdFdpdGhJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbjpzdHJvbmdTZWxmLT5fcG9zaXRpb25JbmZvcm1hdGlvbl0pOwor
ICAgICAgICAgICAgUmV0YWluUHRyPE5TQXJyYXk8X1dLRWxlbWVudEFjdGlvbiAqPj4gZGVmYXVs
dEFjdGlvbnNGcm9tQXNzaXN0YW50ID0gc3Ryb25nU2VsZi0+X3Bvc2l0aW9uSW5mb3JtYXRpb24u
aXNMaW5rID8gW3N0cm9uZ1NlbGYtPl9hY3Rpb25TaGVldEFzc2lzdGFudCBkZWZhdWx0QWN0aW9u
c0ZvckxpbmtTaGVldDplbGVtZW50SW5mby5nZXQoKV0gOiBbc3Ryb25nU2VsZi0+X2FjdGlvblNo
ZWV0QXNzaXN0YW50IGRlZmF1bHRBY3Rpb25zRm9ySW1hZ2VTaGVldDplbGVtZW50SW5mby5nZXQo
KV07CisKKyAgICAgICAgICAgIGF1dG8gbWVudUVsZW1lbnRzID0gbWVudUVsZW1lbnRzRnJvbVBy
ZXZpZXdPckRlZmF1bHRzKG5pbCwgZGVmYXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50LCBlbGVtZW50
SW5mbyk7CisKKyAgICAgICAgICAgIGlmIChhY3Rpb25Qcm92aWRlckZyb21VSURlbGVnYXRlKQor
ICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25Qcm92aWRlckZyb21VSURlbGVnYXRlKG1lbnVF
bGVtZW50cyk7CisKKyAgICAgICAgICAgIGF1dG8gdGl0bGUgPSB0aXRsZUZvck1lbnUoc3Ryb25n
U2VsZi0+X3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rLCBzdHJvbmdTZWxmLT5fc2hvd0xpbmtQ
cmV2aWV3cywgc3Ryb25nU2VsZi0+X3Bvc2l0aW9uSW5mb3JtYXRpb24udXJsLCBzdHJvbmdTZWxm
LT5fcG9zaXRpb25JbmZvcm1hdGlvbi50aXRsZSk7CisgICAgICAgICAgICByZXR1cm4gW1VJTWVu
dSBtZW51V2l0aFRpdGxlOnRpdGxlIGNoaWxkcmVuOm1lbnVFbGVtZW50c107CisgICAgICAgIH07
CisKKyAgICAgICAgY29tcGxldGlvbihbVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbldpdGhJZGVudGlmaWVyOmlkZW50aWZpZXIgcHJldmlld1Byb3ZpZGVyOmNvbnRlbnRQ
cmV2aWV3UHJvdmlkZXIgYWN0aW9uUHJvdmlkZXI6YWN0aW9uUHJvdmlkZXJXcmFwcGVyXSk7Cisg
ICAgfSk7CisKKyAgICBfY29udGV4dE1lbnVFbGVtZW50SW5mbyA9IHdyYXBwZXIoQVBJOjpDb250
ZXh0TWVudUVsZW1lbnRJbmZvOjpjcmVhdGUoX3Bvc2l0aW9uSW5mb3JtYXRpb24pKTsKKyAgICBp
ZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb250
ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVtZW50OmNvbXBsZXRpb25IYW5kbGVyOildKSB7Cisg
ICAgICAgIGF1dG8gY2hlY2tlciA9IFdlYktpdDo6Q29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tl
cjo6Y3JlYXRlKHVpRGVsZWdhdGUsIEBzZWxlY3Rvcihfd2ViVmlldzpjb250ZXh0TWVudUNvbmZp
Z3VyYXRpb25Gb3JFbGVtZW50OmNvbXBsZXRpb25IYW5kbGVyOikpOworICAgICAgICBbdWlEZWxl
Z2F0ZSBfd2ViVmlldzpfd2ViVmlldyBjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVtZW50
Ol9jb250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9j
a1B0cihbY29tcGxldGlvbkJsb2NrID0gV1RGTW92ZShjb21wbGV0aW9uQmxvY2spLCBjaGVja2Vy
ID0gV1RGTW92ZShjaGVja2VyKV0gKFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uICpjb25maWd1
cmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNC
ZWVuQ2FsbGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2hlY2tl
ci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICBjb21wbGV0aW9uQmxv
Y2soY29uZmlndXJhdGlvbik7CisgICAgICAgIH0pLmdldCgpXTsKKyAgICB9IGVsc2UgaWYgKF9w
b3NpdGlvbkluZm9ybWF0aW9uLmlzTGluayAmJiBbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yRWxlbWVudDpj
b21wbGV0aW9uSGFuZGxlcjopXSkgeworICAgICAgICBhdXRvIGNoZWNrZXIgPSBXZWJLaXQ6OkNv
bXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZSh1aURlbGVnYXRlLCBAc2VsZWN0b3Io
d2ViVmlldzpjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVtZW50OmNvbXBsZXRpb25IYW5k
bGVyOikpOworICAgICAgICBbdWlEZWxlZ2F0ZSB3ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51
Q29uZmlndXJhdGlvbkZvckVsZW1lbnQ6X2NvbnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCkgY29t
cGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uQmxvY2sgPSBXVEZNb3ZlKGNv
bXBsZXRpb25CbG9jayksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoVUlDb250ZXh0TWVu
dUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIGlmIChjaGVja2Vy
LT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKKyAg
ICAgICAgICAgIGNvbXBsZXRpb25CbG9jayhjb25maWd1cmF0aW9uKTsKKyAgICAgICAgfSkuZ2V0
KCldOworICAgIH0gZWxzZQorICAgICAgICBjb21wbGV0aW9uQmxvY2sobmlsKTsKK30KKworc3Rh
dGljIFJldGFpblB0cjxVSUltYWdlPiB1aUltYWdlRm9ySW1hZ2UoV2ViQ29yZTo6SW1hZ2UqIGlt
YWdlKQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRv
IGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2UoKTsKKyAgICBpZiAoIWNnSW1hZ2UpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gYWRvcHROUyhbW1VJSW1hZ2UgYWxsb2NdIGlu
aXRXaXRoQ0dJbWFnZTpjZ0ltYWdlLmdldCgpXSk7Cit9CisKKy8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBtZXJnZWQgd2l0aCBjcmVhdGVUYXJnZXRlZERyYWdQcmV2aWV3IGluIERyYWdEcm9wSW50
ZXJhY3Rpb25TdGF0ZS4KK3N0YXRpYyBSZXRhaW5QdHI8VUlUYXJnZXRlZFByZXZpZXc+IGNyZWF0
ZVRhcmdldGVkUHJldmlldyhVSUltYWdlICppbWFnZSwgVUlWaWV3ICpyb290VmlldywgVUlWaWV3
ICpwcmV2aWV3Q29udGFpbmVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGZyYW1lSW5Sb290
Vmlld0Nvb3JkaW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgY2xpcHBp
bmdSZWN0c0luRnJhbWVDb29yZGluYXRlcywgVUlDb2xvciAqYmFja2dyb3VuZENvbG9yKQorewor
ICAgIGlmIChmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlcy5pc0VtcHR5KCkgfHwgIWltYWdlKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lSW5Db250
YWluZXJDb29yZGluYXRlcyA9IFtyb290VmlldyBjb252ZXJ0UmVjdDpmcmFtZUluUm9vdFZpZXdD
b29yZGluYXRlcyB0b1ZpZXc6cHJldmlld0NvbnRhaW5lcl07CisgICAgaWYgKGZyYW1lSW5Db250
YWluZXJDb29yZGluYXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgc2NhbGluZ1JhdGlvID0gZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5h
dGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVzLnNpemUoKTsKKyAgICBOU011
dGFibGVBcnJheSAqY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzID0gW05TTXV0
YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNsaXBwaW5nUmVjdHNJbkZyYW1lQ29vcmRpbmF0
ZXMuc2l6ZSgpXTsKKworICAgIGZvciAoYXV0byByZWN0IDogY2xpcHBpbmdSZWN0c0luRnJhbWVD
b29yZGluYXRlcykgeworICAgICAgICByZWN0LnNjYWxlKHNjYWxpbmdSYXRpbyk7CisgICAgICAg
IFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgYWRkT2JqZWN0OltOU1ZhbHVl
IHZhbHVlV2l0aENHUmVjdDpyZWN0XV07CisgICAgfQorCisgICAgUmV0YWluUHRyPFVJUHJldmll
d1BhcmFtZXRlcnM+IHBhcmFtZXRlcnM7CisgICAgaWYgKGNsaXBwaW5nUmVjdFZhbHVlc0luRnJh
bWVDb29yZGluYXRlcy5jb3VudCkKKyAgICAgICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSVBy
ZXZpZXdQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFRleHRMaW5lUmVjdHM6Y2xpcHBpbmdSZWN0
VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzXSk7CisgICAgZWxzZQorICAgICAgICBwYXJhbWV0ZXJz
ID0gYWRvcHROUyhbW1VJUHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRdKTsKKworICAgIGlm
IChiYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgIFtwYXJhbWV0ZXJzIHNldEJhY2tncm91bmRDb2xv
cjpiYWNrZ3JvdW5kQ29sb3JdOworCisgICAgQ0dQb2ludCBjZW50ZXJJbkNvbnRhaW5lckNvb3Jk
aW5hdGVzID0geyBDR1JlY3RHZXRNaWRYKGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcyksIENH
UmVjdEdldE1pZFkoZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzKSB9OworICAgIGF1dG8gdGFy
Z2V0ID0gYWRvcHROUyhbW1VJUHJldmlld1RhcmdldCBhbGxvY10gaW5pdFdpdGhDb250YWluZXI6
cHJldmlld0NvbnRhaW5lciBjZW50ZXI6Y2VudGVySW5Db250YWluZXJDb29yZGluYXRlc10pOwor
CisgICAgYXV0byBpbWFnZVZpZXcgPSBhZG9wdE5TKFtbVUlJbWFnZVZpZXcgYWxsb2NdIGluaXRX
aXRoSW1hZ2U6aW1hZ2VdKTsKKyAgICBbaW1hZ2VWaWV3IHNldEZyYW1lOmZyYW1lSW5Db250YWlu
ZXJDb29yZGluYXRlc107CisgICAgcmV0dXJuIGFkb3B0TlMoW1tVSVRhcmdldGVkUHJldmlldyBh
bGxvY10gaW5pdFdpdGhWaWV3OmltYWdlVmlldy5nZXQoKSBwYXJhbWV0ZXJzOnBhcmFtZXRlcnMu
Z2V0KCkgdGFyZ2V0OnRhcmdldC5nZXQoKV0pOworfQorCistIChVSVRhcmdldGVkUHJldmlldyAq
KV90YXJnZXRlZFByZXZpZXcKK3sKKyAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5r
ICYmIF9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlKSB7Cisg
ICAgICAgIFtzZWxmIF9zdGFydFN1cHByZXNzaW5nU2VsZWN0aW9uQXNzaXN0YW50Rm9yUmVhc29u
OldlYktpdDo6SW50ZXJhY3Rpb25Jc0hhcHBlbmluZ107CisKKyAgICAgICAgYXV0byBpbmRpY2F0
b3IgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yOworICAgICAgICBhdXRvIHRl
eHRJbmRpY2F0b3JJbWFnZSA9IHVpSW1hZ2VGb3JJbWFnZShpbmRpY2F0b3IuY29udGVudEltYWdl
LmdldCgpKTsKKworICAgICAgICByZXR1cm4gY3JlYXRlVGFyZ2V0ZWRQcmV2aWV3KHRleHRJbmRp
Y2F0b3JJbWFnZS5nZXQoKSwgc2VsZiwgc2VsZi51bnNjYWxlZFZpZXcsIGluZGljYXRvci50ZXh0
Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBpbmRpY2F0b3IudGV4dFJlY3RzSW5C
b3VuZGluZ1JlY3RDb29yZGluYXRlcywgW1VJQ29sb3IgY29sb3JXaXRoQ0dDb2xvcjpjYWNoZWRD
R0NvbG9yKGluZGljYXRvci5lc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IpXSkuYXV0b3JlbGVhc2Uo
KTsKKyAgICB9CisKKyAgICBpZiAoKF9wb3NpdGlvbkluZm9ybWF0aW9uLmlzQXR0YWNobWVudCB8
fCBfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0ltYWdlKSAmJiBfcG9zaXRpb25JbmZvcm1hdGlvbi5p
bWFnZSkgeworICAgICAgICBbc2VsZiBfc3RhcnRTdXBwcmVzc2luZ1NlbGVjdGlvbkFzc2lzdGFu
dEZvclJlYXNvbjpXZWJLaXQ6OkludGVyYWN0aW9uSXNIYXBwZW5pbmddOworCisgICAgICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24uaW1hZ2Ut
Pm1ha2VDR0ltYWdlQ29weSgpOworICAgICAgICBhdXRvIGltYWdlID0gYWRvcHROUyhbW1VJSW1h
Z2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpjZ0ltYWdlLmdldCgpXSk7CisKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZVRhcmdldGVkUHJldmlldyhpbWFnZS5nZXQoKSwgc2VsZiwgc2VsZi51bnNjYWxl
ZFZpZXcsIF9wb3NpdGlvbkluZm9ybWF0aW9uLmJvdW5kcywgeyB9LCBuaWwpLmF1dG9yZWxlYXNl
KCk7CisgICAgfQorCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoVUlUYXJnZXRlZFByZXZpZXcg
Kiljb250ZXh0TWVudUludGVyYWN0aW9uOihVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24gKilpbnRl
cmFjdGlvbiBwcmV2aWV3Rm9ySGlnaGxpZ2h0aW5nTWVudVdpdGhDb25maWd1cmF0aW9uOihVSUNv
bnRleHRNZW51Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24KK3sKKyAgICByZXR1cm4gW3Nl
bGYgX3RhcmdldGVkUHJldmlld107Cit9CisKKy0gKHZvaWQpY29udGV4dE1lbnVJbnRlcmFjdGlv
bldpbGxQcmVzZW50OihVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbgorewor
ICAgIGlmICghX3dlYlZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHVpRGVsZWdhdGUg
PSBzdGF0aWNfY2FzdDxpZDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oX3dlYlZpZXcuVUlEZWxlZ2F0
ZSk7CisgICAgaWYgKCF1aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFt1aURl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpjb250ZXh0TWVudVdp
bGxQcmVzZW50Rm9yRWxlbWVudDopXSkKKyAgICAgICAgW3VpRGVsZWdhdGUgd2ViVmlldzpfd2Vi
VmlldyBjb250ZXh0TWVudVdpbGxQcmVzZW50Rm9yRWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50
SW5mby5nZXQoKV07CisgICAgZWxzZSBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfd2ViVmlldzpjb250ZXh0TWVudVdpbGxQcmVzZW50Rm9yRWxlbWVudDopXSkg
eworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBjb250ZXh0TWVudVdpbGxQcmVzZW50Rm9yRWxl
bWVudDpfY29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKV07CisgICAgICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0VORAorICAgIH0KK30KKworLSAoVUlUYXJnZXRlZFByZXZpZXcg
Kiljb250ZXh0TWVudUludGVyYWN0aW9uOihVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24gKilpbnRl
cmFjdGlvbiBwcmV2aWV3Rm9yRGlzbWlzc2luZ01lbnVXaXRoQ29uZmlndXJhdGlvbjooVUlDb250
ZXh0TWVudUNvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uCit7CisgICAgcmV0dXJuIFtzZWxm
IF90YXJnZXRlZFByZXZpZXddOworfQorCistICh2b2lkKWNvbnRleHRNZW51SW50ZXJhY3Rpb246
KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIHdpbGxDb21taXRXaXRoQW5p
bWF0b3I6KGlkPFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbkNvbW1pdEFuaW1hdGluZz4pYW5pbWF0
b3IKK3sKKyAgICBpZiAoIV93ZWJWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiBf
c3RvcFN1cHByZXNzaW5nU2VsZWN0aW9uQXNzaXN0YW50Rm9yUmVhc29uOldlYktpdDo6SW50ZXJh
Y3Rpb25Jc0hhcHBlbmluZ107CisKKyAgICBhdXRvIHVpRGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxp
ZDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oX3dlYlZpZXcuVUlEZWxlZ2F0ZSk7CisgICAgaWYgKCF1
aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobmVlZHNEZXByZWNhdGVkUHJl
dmlld0FQSSh1aURlbGVnYXRlKSkgeworCisgICAgICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlv
bi5pc0ltYWdlKSB7CisgICAgICAgICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb21taXRQcmV2aWV3ZWRJbWFnZVdpdGhVUkw6KV0pIHsK
KyAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBpbWFnZVVSTCA9IF9wb3NpdGlvbkluZm9ybWF0
aW9uLmltYWdlVVJMOworICAgICAgICAgICAgICAgIGlmIChpbWFnZVVSTC5pc0VtcHR5KCkgfHwg
IShpbWFnZVVSTC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgaW1hZ2VVUkwucHJvdG9jb2xJ
cygiZGF0YSIpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgICAgICAgICAgW3Vp
RGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgY29tbWl0UHJldmlld2VkSW1hZ2VXaXRoVVJMOihO
U1VSTCAqKWltYWdlVVJMXTsKKyAgICAgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19FTkQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHdlYlZpZXc6Y29tbWl0UHJldmlld2luZ1ZpZXdDb250cm9sbGVyOildKSB7CisgICAgICAgICAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICAgICAgaWYgKGF1
dG8gdmlld0NvbnRyb2xsZXIgPSBfY29udGV4dE1lbnVMZWdhY3lQcmV2aWV3Q29udHJvbGxlci5n
ZXQoKSkKKyAgICAgICAgICAgICAgICBbdWlEZWxlZ2F0ZSB3ZWJWaWV3Ol93ZWJWaWV3IGNvbW1p
dFByZXZpZXdpbmdWaWV3Q29udHJvbGxlcjp2aWV3Q29udHJvbGxlcl07CisgICAgICAgICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKF93ZWJWaWV3OmNvbW1pdFByZXZpZXdlZFZpZXdDb250cm9sbGVyOildKSB7CisgICAg
ICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICAgICAg
aWYgKGF1dG8gdmlld0NvbnRyb2xsZXIgPSBfY29udGV4dE1lbnVMZWdhY3lQcmV2aWV3Q29udHJv
bGxlci5nZXQoKSkKKyAgICAgICAgICAgICAgICBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmll
dyBjb21taXRQcmV2aWV3ZWRWaWV3Q29udHJvbGxlcjp2aWV3Q29udHJvbGxlcl07CisgICAgICAg
ICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoW3VpRGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51Rm9y
RWxlbWVudDp3aWxsQ29tbWl0V2l0aEFuaW1hdG9yOildKQorICAgICAgICBbdWlEZWxlZ2F0ZSB3
ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51Rm9yRWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50
SW5mby5nZXQoKSB3aWxsQ29tbWl0V2l0aEFuaW1hdG9yOmFuaW1hdG9yXTsKKyAgICBlbHNlIGlm
IChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNvbnRl
eHRNZW51Rm9yRWxlbWVudDp3aWxsQ29tbWl0V2l0aEFuaW1hdG9yOildKSB7CisgICAgICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgIFt1aURlbGVnYXRlIF93
ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51Rm9yRWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50
SW5mby5nZXQoKSB3aWxsQ29tbWl0V2l0aEFuaW1hdG9yOmFuaW1hdG9yXTsKKyAgICAgICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisgICAgfQorfQorCistICh2b2lkKWNvbnRl
eHRNZW51SW50ZXJhY3Rpb25EaWRFbmQ6KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWludGVy
YWN0aW9uCit7CisgICAgaWYgKCFfd2ViVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgW3Nl
bGYgX3N0b3BTdXBwcmVzc2luZ1NlbGVjdGlvbkFzc2lzdGFudEZvclJlYXNvbjpXZWJLaXQ6Oklu
dGVyYWN0aW9uSXNIYXBwZW5pbmddOworCisgICAgLy8gRklYTUU6IFRoaXMgZGVsZWdhdGUgaXMg
YmVpbmcgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGJ5IFVJS2l0LiA8cmRhcjovL3Byb2JsZW0vNTE1
NTAyOTE+CisgICAgLy8gVGhpcyBjb25kaXRpb25hbCBhdm9pZHMgdGhlIFdLVUlEZWxlZ2F0ZSBi
ZWluZyBjYWxsZWQgdHdpY2UgdG9vLgorICAgIGlmICghX2NvbnRleHRNZW51RWxlbWVudEluZm8p
IHsKKyAgICAgICAgYXV0byB1aURlbGVnYXRlID0gc3RhdGljX2Nhc3Q8aWQ8V0tVSURlbGVnYXRl
UHJpdmF0ZT4+KF93ZWJWaWV3LlVJRGVsZWdhdGUpOworICAgICAgICBpZiAoW3VpRGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51RGlkRW5kRm9y
RWxlbWVudDopXSkKKyAgICAgICAgICAgIFt1aURlbGVnYXRlIHdlYlZpZXc6X3dlYlZpZXcgY29u
dGV4dE1lbnVEaWRFbmRGb3JFbGVtZW50Ol9jb250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpXTsK
KyAgICAgICAgZWxzZSBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihfd2ViVmlldzpjb250ZXh0TWVudURpZEVuZEZvckVsZW1lbnQ6KV0pIHsKKyAgICAgICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgICAgICBbdWlEZWxl
Z2F0ZSBfd2ViVmlldzpfd2ViVmlldyBjb250ZXh0TWVudURpZEVuZEZvckVsZW1lbnQ6X2NvbnRl
eHRNZW51RWxlbWVudEluZm8uZ2V0KCldOworICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfRU5ECisgICAgICAgIH0KKyAgICB9CisKKyAgICBfY29udGV4dE1lbnVMZWdh
Y3lQcmV2aWV3Q29udHJvbGxlciA9IG51bGxwdHI7CisgICAgX2NvbnRleHRNZW51TGVnYWN5TWVu
dSA9IG51bGxwdHI7CisgICAgX2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSA9IE5P
OworICAgIF9jb250ZXh0TWVudUVsZW1lbnRJbmZvID0gbnVsbHB0cjsKK30KKworQGVuZAorCisj
ZWxzZQorCitAaW1wbGVtZW50YXRpb24gV0tDb250ZW50VmlldyAoV0tJbnRlcmFjdGlvblByZXZp
ZXcpCisKIC0gKHZvaWQpX3JlZ2lzdGVyUHJldmlldwogewogICAgIGlmICghX3dlYlZpZXcuYWxs
b3dzTGlua1ByZXZpZXcpCkBAIC03NzY2LDcgKzgzMzIsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKnBy
ZXZpZXdJZGVudGlmaWVyRm9yRWxlbWVudEFjdGlvbihfV0tFbGVtZW50QWN0aW9uICphY3Rpb24p
CiAKIEBlbmQKIAotI2VuZGlmIC8vIFVTRShMT05HX1BSRVNTX0ZPUl9MSU5LX1BSRVZJRVcpCisj
ZW5kaWYgLy8gVVNFKFVJQ09OVEVYVE1FTlUpCiAKICNlbmRpZiAvLyBIQVZFKExJTktfUFJFVklF
VykKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372417</attachid>
            <date>2019-06-18 18:52:50 -0700</date>
            <delta_ts>2019-06-18 19:09:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198986-20190619115248.patch</filename>
            <type>text/plain</type>
            <size>43181</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0OTM1YzQ1YzhmZmI4MzFhZjJkYjBk
MDkyNGRkMzcxZDM3NDE1M2UuLmYxMDc4MmMyNzhlODBlNzQ0Njg3OThkNDczNDA1YzFmNjI2NTJh
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDYtMTggIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBpbXBsZW1lbnRh
dGlvbiBmb3IgV0tDb250ZW50VmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk4OTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTg3NTE4OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVVNF
X1VJQ09OVEVYVE1FTlUgZm9yIGlPUyAxMysuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoK
KwogMjAxOS0wNi0xOCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBBZGQgcHJlbGltaW5hcnkgQU5HTEUgYmFja2VuZCB0byBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA1MDg0NzJlYzU5ODFiMzRkZTcwOWZhMmEzMzA2OGZiNmMwNDc2NzI3Li4xZTE2
NTMyMGVjOWRlNmFiYjQ3Y2U5NGM3OTU1MWRmNzEyZDJjZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxOS0wNi0xOCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CisKKyAgICAgICAgVUlDb250ZXh0TWVudUludGVyYWN0aW9uIGltcGxlbWVudGF0aW9uIGZv
ciBXS0NvbnRlbnRWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTg5ODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxODc1MTg5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluY2x1ZGUgKyBzb2Z0
IGxpbmsgRERDb250ZXh0TWVudUFjdGlvbgorICAgICAgICBhbmQgdGVtcG9yYXJpbHkgZGVzY3Jp
YmUgVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgKiBwYWwvc3BpL2lvcy9E
YXRhRGV0ZWN0b3JzVUlTUEkuaDoKKyAgICAgICAgKiBwYWwvc3BpL2lvcy9VSUtpdFNQSS5oOgor
CiAyMDE5LTA2LTE4ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGluayB0byB0aGUgbmV3IEFwcFNTTyBwcml2YXRlIGZyYW1ld29yawpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1
Yjc1NjliOTRlNDVmZGE3MTc4MGZiMGYyMTJlMDFlNzUwMGQxNGM1Li45NGQ5OTQ3NmZmM2M0YWNl
MzNhNDUwMTc2OTNiYjQ4YWRkNzUwMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE5
LTA2LTE4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBVSUNvbnRl
eHRNZW51SW50ZXJhY3Rpb24gaW1wbGVtZW50YXRpb24gZm9yIFdLQ29udGVudFZpZXcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODk4NgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTE4NzUxODk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBh
bmQgaXRzIGRlbGVnYXRlIGFzIGEKKyAgICAgICAgcmVwbGFjZW1lbnQgZm9yIFVJUHJldmlld0l0
ZW1Db250cm9sbGVyIGluIGlPUyAxMy4KKworICAgICAgICBJbiBvcmRlciB0byBwcmVzZXJ2ZSBl
eGlzdGluZyBiZWhhdmlvdXIgYXMgbXVjaCBhcyBwb3NzaWJsZSwKKyAgICAgICAgd2UgY2hlY2sg
Zm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBuZXcgV2ViS2l0IEFQSSB0byBjb25maWd1cmUKKyAg
ICAgICAgdGhlIG1lbnUuIElmIHRoYXQgaXMgbm90IHByZXNlbnQsIHdlIGF0dGVtcHQgdG8gY29u
dmVydAorICAgICAgICB0aGUgcmVzdWx0cyBvZiB0aGUgZXhpc3RpbmcgV2ViS2l0IFdLUHJldmll
d0FjdGlvbiBkZWxlZ2F0ZXMKKyAgICAgICAgaW50byBzb21ldGhpbmcgdGhhdCB3b3JrcyB3aXRo
IFVJQ29udGV4dE1lbnVzLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXR1cEludGVyYWN0aW9uXSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTpd
KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVnaXN0ZXJQcmV2aWV3XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX3VucmVnaXN0ZXJQcmV2aWV3XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgX3Nob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZDpdKToKKyAgICAgICAg
KG5lZWRzRGVwcmVjYXRlZFByZXZpZXdBUEkpOgorICAgICAgICAodWlBY3Rpb25Gb3JQcmV2aWV3
QWN0aW9uKToKKyAgICAgICAgKG1lbnVGcm9tUHJldmlld09yRGVmYXVsdHMpOgorICAgICAgICAo
dGl0bGVGb3JNZW51KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBhc3NpZ25MZWdhY3lEYXRh
Rm9yQ29udGV4dE1lbnVJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNv
bnRleHRNZW51SW50ZXJhY3Rpb246Y29uZmlndXJhdGlvbkZvck1lbnVBdExvY2F0aW9uOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9jb250ZXh0TWVudUludGVyYWN0aW9uOmNvbmZpZ3Vy
YXRpb25Gb3JNZW51QXRMb2NhdGlvbjpjb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IGNvbnRpbnVlQ29udGV4dE1lbnVJbnRlcmFjdGlvbjpdKToKKyAgICAgICAgKHVpSW1h
Z2VGb3JJbWFnZSk6CisgICAgICAgIChjcmVhdGVUYXJnZXRlZFByZXZpZXcpOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IF90YXJnZXRlZFByZXZpZXddKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBjb250ZXh0TWVudUludGVyYWN0aW9uOnByZXZpZXdGb3JIaWdobGlnaHRpbmdNZW51V2l0
aENvbmZpZ3VyYXRpb246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY29udGV4dE1lbnVJ
bnRlcmFjdGlvbldpbGxQcmVzZW50Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNvbnRl
eHRNZW51SW50ZXJhY3Rpb246cHJldmlld0ZvckRpc21pc3NpbmdNZW51V2l0aENvbmZpZ3VyYXRp
b246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY29udGV4dE1lbnVJbnRlcmFjdGlvbjp3
aWxsQ29tbWl0V2l0aEFuaW1hdG9yOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNvbnRl
eHRNZW51SW50ZXJhY3Rpb25EaWRFbmQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2hv
dWxkVXNlUHJldmlld0ZvckxvbmdQcmVzc10pOiBEZWxldGVkLgorCiAyMDE5LTA2LTE4ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBkYXRl
IFdlYktpdCBBUEkgdG8gc2VwYXJhdGVseSByZXRyaWV2ZSBhY3Rpb25zIGFuZCB1c2UgY29udGV4
dCBtZW51cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggOGE1NmM2Y2YwNTMxNjgzZDkwZmMyMzk1ZTMyZWU4ZDk1
NTgyNDNlMi4uODk3MzJhMDg2ZGJmODEyNGMxMzYyZWYyZjQ4YWVjZTgxM2VlMzgzZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCkBAIC0xNTg1LDMgKzE1ODUsNyBAQAogI2lmIChQTEFURk9STShJT1MpICYmIF9fSVBI
T05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMCB8fCBQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNTAwKQogI2RlZmluZSBIQVZF
X0FQUF9TU08gMQogI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMAorI2RlZmluZSBVU0VfVUlDT05URVhUTUVOVSAx
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9EYXRh
RGV0ZWN0b3JzVUlTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9EYXRhRGV0
ZWN0b3JzVUlTUEkuaAppbmRleCAwOWZjNTlmMjAzMTk5YjE0NWJiNTU3MWRlYzc3ZmI4YzA5Mjdi
OGU0Li44MmJhNTAzODVmYjBmNzMzN2RkYTlhMDI4YjJiNDZiYWE3NjYwMWFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvRGF0YURldGVjdG9yc1VJU1BJLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL0RhdGFEZXRlY3RvcnNVSVNQSS5oCkBA
IC0zMSw2ICszMSw5IEBACiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAogI2ltcG9ydCA8
RGF0YURldGVjdG9yc1VJL0REQWN0aW9uLmg+CisjaWYgSEFWRShMSU5LX1BSRVZJRVcpICYmIFVT
RShVSUNPTlRFWFRNRU5VKQorI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0REQ29udGV4dE1lbnVB
Y3Rpb24uaD4KKyNlbmRpZgogI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0RERGV0ZWN0aW9uQ29u
dHJvbGxlci5oPgogCiAjZWxzZQpAQCAtNDYsNiArNDksMTMgQEAKIEBwcm9wZXJ0eSAocmVhZG9u
bHkpIE5TU3RyaW5nICphY3Rpb25VVEk7CiBAZW5kCiAKKyNpZiBIQVZFKExJTktfUFJFVklFVykg
JiYgVVNFKFVJQ09OVEVYVE1FTlUpCitAY2xhc3MgVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb247
CitAaW50ZXJmYWNlIEREQ29udGV4dE1lbnVBY3Rpb24KKysgKFVJQ29udGV4dE1lbnVDb25maWd1
cmF0aW9uICopY29udGV4dE1lbnVDb25maWd1cmF0aW9uV2l0aFVSTDooTlNVUkwgKilVUkwgaW5W
aWV3OihVSVZpZXcgKil2aWV3IGNvbnRleHQ6KE5TRGljdGlvbmFyeSAqKWNvbnRleHQgbWVudUlk
ZW50aWZpZXI6KE5TU3RyaW5nICopbWVudUlkZW50aWZpZXI7CitAZW5kCisjZW5kaWYKKwogQHBy
b3RvY29sIERERGV0ZWN0aW9uQ29udHJvbGxlckludGVyYWN0aW9uRGVsZWdhdGUgPE5TT2JqZWN0
PgogQGVuZAogCkBAIC03MCw2ICs4MCw5IEBACiBAZW5kCiAKIFNPRlRfTElOS19QUklWQVRFX0ZS
QU1FV09SSyhEYXRhRGV0ZWN0b3JzVUkpCisjaWYgSEFWRShMSU5LX1BSRVZJRVcpICYmIFVTRShV
SUNPTlRFWFRNRU5VKQorU09GVF9MSU5LX0NMQVNTKERhdGFEZXRlY3RvcnNVSSwgRERDb250ZXh0
TWVudUFjdGlvbik7CisjZW5kaWYKIFNPRlRfTElOS19DTEFTUyhEYXRhRGV0ZWN0b3JzVUksIERE
RGV0ZWN0aW9uQ29udHJvbGxlcikKIFNPRlRfTElOS19DT05TVEFOVChEYXRhRGV0ZWN0b3JzVUks
IGtEYXRhRGV0ZWN0b3JzTGVhZGluZ1RleHQsIGNvbnN0IE5TU3RyaW5nICopCiBTT0ZUX0xJTktf
Q09OU1RBTlQoRGF0YURldGVjdG9yc1VJLCBrRGF0YURldGVjdG9yc1RyYWlsaW5nVGV4dCwgY29u
c3QgTlNTdHJpbmcgKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lv
cy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmgK
aW5kZXggOWI1ZTVhM2NkZTc0OWViYTA5YTY1NDNjMTU1NWQ3MTgxOTFhYWJkZS4uNTgwZDk4YmNj
MDM2NzlmYzVhMDMwOGY3OTNkMjQzMDZmOTgyNzMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTE1MSw3ICsxNTEsNyBAQCBOU19BU1NVTUVfTk9OTlVM
TF9FTkQKICNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiAjaWYgRU5BQkxFKEZV
TExfS0VZQk9BUkRfQUNDRVNTKQotQGludGVyZmFjZSBVSUNvbG9yIChJUEkpCitAaW50ZXJmYWNl
IFVJQ29sb3IgKCkKICsgKFVJQ29sb3IgKilrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3I7CiBA
ZW5kCiAKQEAgLTE2Myw5ICsxNjMsMjIgQEAgTlNfQVNTVU1FX05PTk5VTExfRU5ECiAjZW5kaWYK
IAogI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi1AaW50ZXJmYWNlIFVJQ29sb3IgKFVJ
Q29sb3JJbnRlcm5hbCkKK0BpbnRlcmZhY2UgVUlDb2xvciAoKQogKyAoVUlDb2xvciAqKXRhYmxl
Q2VsbERlZmF1bHRTZWxlY3Rpb25UaW50Q29sb3I7CiBAZW5kCiAjZW5kaWYKIAorI2lmIEhBVkUo
TElOS19QUkVWSUVXKSAmJiBVU0UoVUlDT05URVhUTUVOVSkKK0BpbnRlcmZhY2UgVUlDb250ZXh0
TWVudUNvbmZpZ3VyYXRpb24gKE5lZWRlZFVudGlsNTEyODg0MzVGaXhlZCkKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBpZCA8TlNDb3B5aW5nPiBpZGVudGlmaWVyOworQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHkpIFVJQ29udGV4dE1lbnVDb250ZW50UHJldmlld1Byb3ZpZGVyIHByZXZp
ZXdQcm92aWRlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBVSUNvbnRleHRNZW51QWN0
aW9uUHJvdmlkZXIgYWN0aW9uUHJvdmlkZXI7CitAZW5kCisKK0BpbnRlcmZhY2UgVUlQcmV2aWV3
QWN0aW9uICgpCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBVSUltYWdlICppbWFnZTsK
K0BlbmQKKworI2VuZGlmCisKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5oCmluZGV4IDNlNTcwMTdjYWFmMGRkYTc3YmQxMjkwOWRlM2E3MWM1ZjVlN2IxOTEuLjMwYzBh
ZGIyMWFiN2NiMWRkN2Q5MjgyNDQ4MTNlNjJhMzA4YzQzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKQEAgLTU5
LDEwICs1OSw2IEBACiAjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgX19oYXNf
aW5jbHVkZSg8V2ViS2l0QWRkaXRpb25zL1dLSW50ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+
KQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dLSW50ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25z
Lmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBPcGVuUGFuZWxQYXJhbWV0ZXJz
OwogfQpAQCAtMTAxLDYgKzk3LDcgQEAgc3RydWN0IFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dDsK
IEBjbGFzcyBVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI7CiBAY2xhc3MgV2ViRXZlbnQ7CiBAY2xh
c3MgV0tBY3Rpb25TaGVldEFzc2lzdGFudDsKK0BjbGFzcyBXS0NvbnRleHRNZW51RWxlbWVudElu
Zm87CiBAY2xhc3MgV0tEcmF3aW5nQ29vcmRpbmF0b3I7CiBAY2xhc3MgV0tGb2N1c2VkRm9ybUNv
bnRyb2xWaWV3OwogQGNsYXNzIFdLRm9ybUlucHV0Q29udHJvbDsKQEAgLTI0NSw4ICsyNDIsMTMg
QEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKICAgICBSZXRhaW5QdHI8VUlHZXN0dXJl
UmVjb2duaXplcj4gX3ByZXZpZXdTZWNvbmRhcnlHZXN0dXJlUmVjb2duaXplcjsKICAgICBWZWN0
b3I8Ym9vbD4gX2ZvY3VzU3RhdGVTdGFjazsKICNpZiBIQVZFKExJTktfUFJFVklFVykKLSNpZiBV
U0UoTE9OR19QUkVTU19GT1JfTElOS19QUkVWSUVXKQotICAgIExPTkdfUFJFU1NfTElOS19QUkVW
SUVXX01FTUJFUlMKKyNpZiBVU0UoVUlDT05URVhUTUVOVSkKKyAgICBSZXRhaW5QdHI8VUlDb250
ZXh0TWVudUludGVyYWN0aW9uPiBfY29udGV4dE1lbnVJbnRlcmFjdGlvbjsKKyAgICBSZXRhaW5Q
dHI8V0tDb250ZXh0TWVudUVsZW1lbnRJbmZvPiBfY29udGV4dE1lbnVFbGVtZW50SW5mbzsKKyAg
ICBCT09MIF9zaG93TGlua1ByZXZpZXdzOworICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9sbGVy
PiBfY29udGV4dE1lbnVMZWdhY3lQcmV2aWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8VUlN
ZW51PiBfY29udGV4dE1lbnVMZWdhY3lNZW51OworICAgIEJPT0wgX2NvbnRleHRNZW51SGFzUmVx
dWVzdGVkTGVnYWN5RGF0YTsKICNlbHNlCiAgICAgUmV0YWluUHRyPFVJUHJldmlld0l0ZW1Db250
cm9sbGVyPiBfcHJldmlld0l0ZW1Db250cm9sbGVyOwogI2VuZGlmCkBAIC01MzIsMTcgKzUzNCwx
MyBAQCBGT1JfRUFDSF9QUklWQVRFX1dLQ09OVEVOVFZJRVdfQUNUSU9OKERFQ0xBUkVfV0tDT05U
RU5UVklFV19BQ1RJT05fRk9SX1dFQl9WSUVXKQogQGVuZAogCiAjaWYgSEFWRShMSU5LX1BSRVZJ
RVcpCi0jaWYgVVNFKExPTkdfUFJFU1NfRk9SX0xJTktfUFJFVklFVykKLUBpbnRlcmZhY2UgV0tD
b250ZW50VmlldyAoV0tJbnRlcmFjdGlvblByZXZpZXcpIDxMT05HX1BSRVNTX0xJTktfUFJFVklF
V19QUk9UT0NPTD4KKyNpZiBVU0UoVUlDT05URVhUTUVOVSkKK0BpbnRlcmZhY2UgV0tDb250ZW50
VmlldyAoV0tJbnRlcmFjdGlvblByZXZpZXcpIDxVSUNvbnRleHRNZW51SW50ZXJhY3Rpb25EZWxl
Z2F0ZT4KICNlbHNlCiBAaW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb25QcmV2
aWV3KSA8VUlQcmV2aWV3SXRlbURlbGVnYXRlPgogI2VuZGlmCi0KLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgQk9PTCBzaG91bGRVc2VQcmV2aWV3Rm9yTG9uZ1ByZXNzOwotCiAtICh2
b2lkKV9yZWdpc3RlclByZXZpZXc7CiAtICh2b2lkKV91bnJlZ2lzdGVyUHJldmlldzsKLQogQGVu
ZAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDVjYWNlMDRiZTZlMDg5MWU5YWVjNjkxNGZh
MDA2MzM5MzUzYWFmZGYuLmQ4MmY3ZWUyMDY0OTY5YzFkMTg1OGEwZmQzMTE2NWMzOGJmZDBjZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbQpAQCAtMjksNiArMjksNyBAQAogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAKICNpbXBvcnQgIkFQSVVJQ2xpZW50LmgiCisjaW1wb3J0ICJDb21wbGV0aW9uSGFuZGxl
ckNhbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJEb2N1bWVudEVkaXRpbmdDb250ZXh0LmgiCiAjaW1w
b3J0ICJFZGl0YWJsZUltYWdlQ29udHJvbGxlci5oIgogI2ltcG9ydCAiSW5wdXRWaWV3VXBkYXRl
RGVmZXJyZXIuaCIKQEAgLTEwNSw2ICsxMDYsOSBAQAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9E
YXRhRGV0ZWN0b3JzQ29yZVNQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9pb3MvRGF0YURldGVjdG9y
c1VJU1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+Cisj
aW1wb3J0IDxwYWwvc3BpL2lvcy9VSUtpdFNQSS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4
Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL09wdGlv
bmFsLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvU2V0Rm9yU2Nv
cGUuaD4KQEAgLTE1MSw4ICsxNTUsOSBAQCBTT0ZUX0xJTktfQ0xBU1MoTWFuYWdlZENvbmZpZ3Vy
YXRpb24sIE1DUHJvZmlsZUNvbm5lY3Rpb24pOwogU09GVF9MSU5LX0NPTlNUQU5UKE1hbmFnZWRD
b25maWd1cmF0aW9uLCBNQ0ZlYXR1cmVEZWZpbml0aW9uTG9va3VwQWxsb3dlZCwgTlNTdHJpbmcg
KikKICNlbmRpZgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgX19oYXNfaW5jbHVk
ZSg8V2ViS2l0QWRkaXRpb25zL1dLSW50ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+KQotI2lt
cG9ydCA8V2ViS2l0QWRkaXRpb25zL1dLSW50ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+Cisj
aWYgSEFWRShMSU5LX1BSRVZJRVcpICYmIFVTRShVSUNPTlRFWFRNRU5VKQorc3RhdGljIE5TU3Ry
aW5nICogY29uc3Qgd2Via2l0U2hvd0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VLZXkgPSBAIldlYktp
dFNob3dMaW5rUHJldmlld3MiOworc3RhdGljIE5TU3RyaW5nICogY29uc3Qgd2Via2l0U2hvd0xp
bmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFuZ2VkTm90aWZpY2F0aW9uID0gQCJXZWJLaXRTaG93TGlu
a1ByZXZpZXdzUHJlZmVyZW5jZUNoYW5nZWQiOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXQVRD
SE9TKQpAQCAtNzY0LDE0ICs3NjksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGhhc0ZvY3VzZWRF
bGVtZW50KFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiBmb2N1c2VkRWwKICAgICBb
X2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGF5OmhpZ2hsaWdodERl
bGF5XTsKICAgICBbX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGVn
YXRlOnNlbGZdOwogCi0jaWYgSEFWRShMSU5LX1BSRVZJRVcpCi0gICAgaWYgKCFzZWxmLnNob3Vs
ZFVzZVByZXZpZXdGb3JMb25nUHJlc3MpCisjaWYgSEFWRShMSU5LX1BSRVZJRVcpICYmICFVU0Uo
VUlDT05URVhUTUVOVSkKKyAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaGlnaGxpZ2h0
TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIFtzZWxmIF9jcmVhdGVBbmRD
b25maWd1cmVMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcl07CiAjZW5kaWYKLSAgICB7Ci0gICAg
ICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJl
UmVjb2duaXplci5nZXQoKV07Ci0KLSAgICAgICAgW3NlbGYgX2NyZWF0ZUFuZENvbmZpZ3VyZUxv
bmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyXTsKLSAgICB9CiAKICNpZiBFTkFCTEUoREFUQV9JTlRF
UkFDVElPTikKICAgICBbc2VsZiBzZXR1cERyYWdBbmREcm9wSW50ZXJhY3Rpb25zXTsKQEAgLTcz
NjcsNyArNzM2OCw3IEBAIHN0YXRpYyBXZWJFdmVudEZsYWdzIHdlYkV2ZW50RmxhZ3NGb3JVSUtl
eU1vZGlmaWVyRmxhZ3MoVUlLZXlNb2RpZmllckZsYWdzIGZsYWdzCiAKICNpZiBIQVZFKExJTktf
UFJFVklFVykKICAgICBpZiAoW3VzZXJJbnRlcmZhY2VJdGVtIGlzRXF1YWxUb1N0cmluZzpAImxp
bmtQcmV2aWV3UG9wb3ZlckNvbnRlbnRzIl0pIHsKLSNpZiBVU0UoTE9OR19QUkVTU19GT1JfTElO
S19QUkVWSUVXKQorI2lmIFVTRShVSUNPTlRFWFRNRU5VKQogICAgICAgICByZXR1cm4gQHsgdXNl
ckludGVyZmFjZUl0ZW06IEB7IEAicGFnZVVSTCI6IFdURjo6dXNlclZpc2libGVTdHJpbmcoX3Bv
c2l0aW9uSW5mb3JtYXRpb24udXJsKSB9IH07CiAjZWxzZQogICAgICAgICBOU1N0cmluZyAqdXJs
ID0gW19wcmV2aWV3SXRlbUNvbnRyb2xsZXIgcHJldmlld0RhdGFdW1VJUHJldmlld0RhdGFMaW5r
XTsKQEAgLTc0MTEsMTcgKzc0MTIsNTgyIEBAIHN0YXRpYyBOU1N0cmluZyAqcHJldmlld0lkZW50
aWZpZXJGb3JFbGVtZW50QWN0aW9uKF9XS0VsZW1lbnRBY3Rpb24gKmFjdGlvbikKICAgICByZXR1
cm4gbmlsOwogfQogCi0jaWYgVVNFKExPTkdfUFJFU1NfRk9SX0xJTktfUFJFVklFVykKLSNpbmNs
dWRlIDxXZWJLaXRBZGRpdGlvbnMvV0tJbnRlcmFjdGlvblByZXZpZXdBZGRpdGlvbnMubW0+Ci0j
ZWxzZQorI2lmIFVTRShVSUNPTlRFWFRNRU5VKQogCiBAaW1wbGVtZW50YXRpb24gV0tDb250ZW50
VmlldyAoV0tJbnRlcmFjdGlvblByZXZpZXcpCiAKLS0gKEJPT0wpc2hvdWxkVXNlUHJldmlld0Zv
ckxvbmdQcmVzcworLSAodm9pZClfcmVnaXN0ZXJQcmV2aWV3CiB7Ci0gICAgcmV0dXJuIE5POwor
ICAgIGlmICghX3dlYlZpZXcuYWxsb3dzTGlua1ByZXZpZXcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIF9jb250ZXh0TWVudUludGVyYWN0aW9uID0gYWRvcHROUyhbW1VJQ29udGV4dE1lbnVJbnRl
cmFjdGlvbiBhbGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTpzZWxmXSk7CisgICAgX2NvbnRleHRNZW51
SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSA9IE5POworICAgIFtzZWxmIGFkZEludGVyYWN0aW9uOl9j
b250ZXh0TWVudUludGVyYWN0aW9uLmdldCgpXTsKKworICAgIFtzZWxmIF9zaG93TGlua1ByZXZp
ZXdzUHJlZmVyZW5jZUNoYW5nZWQ6bmlsXTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3Nob3dM
aW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZDopIG5hbWU6d2Via2l0U2hvd0xpbmtQcmV2aWV3
c1ByZWZlcmVuY2VDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworfQorCistICh2b2lk
KV91bnJlZ2lzdGVyUHJldmlldworeworICAgIGlmICghX2NvbnRleHRNZW51SW50ZXJhY3Rpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIFtzZWxmIHJlbW92ZUludGVyYWN0aW9uOl9jb250ZXh0
TWVudUludGVyYWN0aW9uLmdldCgpXTsKKyAgICBfY29udGV4dE1lbnVJbnRlcmFjdGlvbiA9IG5p
bDsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2Jz
ZXJ2ZXI6c2VsZiBuYW1lOndlYmtpdFNob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZE5v
dGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKK30KKworLSAodm9pZClfc2hvd0xpbmtQcmV2aWV3c1By
ZWZlcmVuY2VDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIEJv
b2xlYW4ga2V5RXhpc3RzQW5kSGFzVmFsaWRGb3JtYXQgPSBmYWxzZTsKKyAgICBCb29sZWFuIHBy
ZWZWYWx1ZSA9IENGUHJlZmVyZW5jZXNHZXRBcHBCb29sZWFuVmFsdWUoKF9fYnJpZGdlIENGU3Ry
aW5nUmVmKXdlYmtpdFNob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlS2V5LCBrQ0ZQcmVmZXJlbmNl
c0N1cnJlbnRBcHBsaWNhdGlvbiwgJmtleUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0KTsKKyAgICBp
ZiAoa2V5RXhpc3RzQW5kSGFzVmFsaWRGb3JtYXQpCisgICAgICAgIF9zaG93TGlua1ByZXZpZXdz
ID0gcHJlZlZhbHVlOworICAgIGVsc2UKKyAgICAgICAgX3Nob3dMaW5rUHJldmlld3MgPSBZRVM7
Cit9CisKK3N0YXRpYyBib29sIG5lZWRzRGVwcmVjYXRlZFByZXZpZXdBUEkoaWQ8V0tVSURlbGVn
YXRlPiBkZWxlZ2F0ZSkKK3sKKyAgICAvLyBGSVhNRTogUmVwbGFjZSB0aGVzZSB3aXRoIGJvb2xl
YW5zIGluIFVJRGVsZWdhdGUuaC4KKyAgICByZXR1cm4gZGVsZWdhdGUKKyAgICAmJiAhW2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVDb25m
aWd1cmF0aW9uRm9yRWxlbWVudDpjb21wbGV0aW9uSGFuZGxlcjopXQorICAgICYmICFbZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51Q29uZmln
dXJhdGlvbkZvckVsZW1lbnQ6Y29tcGxldGlvbkhhbmRsZXI6KV0KKyAgICAmJiAhW2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVGb3JFbGVt
ZW50OndpbGxDb21taXRXaXRoQW5pbWF0b3I6KV0KKyAgICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpjb250ZXh0TWVudUZvckVsZW1lbnQ6d2lsbENv
bW1pdFdpdGhBbmltYXRvcjopXQorICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfd2ViVmlldzpjb250ZXh0TWVudVdpbGxQcmVzZW50Rm9yRWxlbWVudDopXQor
ICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNv
bnRleHRNZW51V2lsbFByZXNlbnRGb3JFbGVtZW50OildCisgICAgJiYgIVtkZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNvbnRleHRNZW51RGlkRW5kRm9yRWxl
bWVudDopXQorICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3
ZWJWaWV3OmNvbnRleHRNZW51RGlkRW5kRm9yRWxlbWVudDopXQorICAgICYmIChbZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnNob3VsZFByZXZpZXdFbGVtZW50
OildCisgICAgICAgIHx8IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdl
YlZpZXc6cHJldmlld2luZ1ZpZXdDb250cm9sbGVyRm9yRWxlbWVudDpkZWZhdWx0QWN0aW9uczop
XQorICAgICAgICB8fCBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJW
aWV3OmNvbW1pdFByZXZpZXdpbmdWaWV3Q29udHJvbGxlcjopXQorICAgICAgICB8fCBbZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpwcmV2aWV3Vmlld0NvbnRy
b2xsZXJGb3JVUkw6ZGVmYXVsdEFjdGlvbnM6ZWxlbWVudEluZm86KV0KKyAgICAgICAgfHwgW2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6cHJldmlld1ZpZXdD
b250cm9sbGVyRm9yVVJMOildCisgICAgICAgIHx8IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnByZXZpZXdWaWV3Q29udHJvbGxlckZvckltYWdlOmFsdGVy
bmF0ZVVSTDpkZWZhdWx0QWN0aW9uczplbGVtZW50SW5mbzopXSk7Cit9CisKK0FMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0JFR0lOCitzdGF0aWMgTlNBcnJheTxXS1ByZXZpZXdBY3Rpb24g
Kj4gKndrUHJldmlld0FjdGlvbnNGcm9tRWxlbWVudEFjdGlvbnMoTlNBcnJheTxfV0tFbGVtZW50
QWN0aW9uICo+ICplbGVtZW50QWN0aW9ucywgX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKmVsZW1l
bnRJbmZvKQoreworICAgIE5TTXV0YWJsZUFycmF5PFdLUHJldmlld0FjdGlvbiAqPiAqcHJldmll
d0FjdGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6W2VsZW1lbnRBY3Rp
b25zIGNvdW50XV07CisgICAgZm9yIChfV0tFbGVtZW50QWN0aW9uICplbGVtZW50QWN0aW9uIGlu
IGVsZW1lbnRBY3Rpb25zKSB7CisgICAgICAgIFdLUHJldmlld0FjdGlvbiAqcHJldmlld0FjdGlv
biA9IFtXS1ByZXZpZXdBY3Rpb24gYWN0aW9uV2l0aElkZW50aWZpZXI6cHJldmlld0lkZW50aWZp
ZXJGb3JFbGVtZW50QWN0aW9uKGVsZW1lbnRBY3Rpb24pIHRpdGxlOmVsZW1lbnRBY3Rpb24udGl0
bGUgc3R5bGU6VUlQcmV2aWV3QWN0aW9uU3R5bGVEZWZhdWx0IGhhbmRsZXI6XihVSVByZXZpZXdB
Y3Rpb24gKiwgVUlWaWV3Q29udHJvbGxlciAqKSB7CisgICAgICAgICAgICBbZWxlbWVudEFjdGlv
biBydW5BY3Rpb25XaXRoRWxlbWVudEluZm86ZWxlbWVudEluZm9dOworICAgICAgICB9XTsKKyAg
ICAgICAgcHJldmlld0FjdGlvbi5pbWFnZSA9IFtfV0tFbGVtZW50QWN0aW9uIGltYWdlRm9yRWxl
bWVudEFjdGlvblR5cGU6ZWxlbWVudEFjdGlvbi50eXBlXTsKKyAgICAgICAgW3ByZXZpZXdBY3Rp
b25zIGFkZE9iamVjdDpwcmV2aWV3QWN0aW9uXTsKKyAgICB9CisgICAgcmV0dXJuIHByZXZpZXdB
Y3Rpb25zOworfQorCitzdGF0aWMgVUlBY3Rpb24gKnVpQWN0aW9uRm9yUHJldmlld0FjdGlvbihV
SVByZXZpZXdBY3Rpb24gKnByZXZpZXdBY3Rpb24sIFVJVmlld0NvbnRyb2xsZXIgKnByZXZpZXdW
aWV3Q29udHJvbGxlcikKK3sKKyAgICAvLyBVSVByZXZpZXdBY3Rpb25JdGVtLmltYWdlIGlzIFNQ
SSwgc28gbm8gZXh0ZXJuYWwgY2xpZW50cyB3aWxsIGJlIGFibGUKKyAgICAvLyB0byBwcm92aWRl
IGdseXBocyBmb3IgYWN0aW9ucyA8cmRhcjovL3Byb2JsZW0vNTAxNTE4NTU+LgorICAgIC8vIEhv
d2V2ZXIsIHRoZXkgc2hvdWxkIG1pZ3JhdGUgdG8gdGhlIG5ldyBBUEkuCisKKyAgICByZXR1cm4g
W1VJQWN0aW9uIGFjdGlvbldpdGhUaXRsZTpwcmV2aWV3QWN0aW9uLnRpdGxlIGltYWdlOnByZXZp
ZXdBY3Rpb24uaW1hZ2UgaWRlbnRpZmllcjpuaWwgaGFuZGxlcjpeKFVJQWN0aW9uICphY3Rpb24p
IHsKKyAgICAgICAgcHJldmlld0FjdGlvbi5oYW5kbGVyKHByZXZpZXdBY3Rpb24sIHByZXZpZXdW
aWV3Q29udHJvbGxlcik7CisgICAgfV07Cit9CitBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19FTkQKKworc3RhdGljIE5TQXJyYXk8VUlNZW51RWxlbWVudCAqPiAqbWVudUVsZW1lbnRzRnJv
bVByZXZpZXdPckRlZmF1bHRzKFVJVmlld0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJvbGxl
ciwgY29uc3QgUmV0YWluUHRyPE5TQXJyYXk+JiBkZWZhdWx0RWxlbWVudEFjdGlvbnMsIFJldGFp
blB0cjxfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbz4gZWxlbWVudEluZm8pCit7CisgICAgYXV0byBh
Y3Rpb25zID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmRlZmF1bHRFbGVtZW50
QWN0aW9ucy5nZXQoKS5jb3VudF07CisKKyAgICAvLyBPbmUgb2YgdGhlIGRlbGVnYXRlcyBtYXkg
aGF2ZSBwcm92aWRlZCBhIFVJVmlld0NvbnRyb2xsZXIgd2l0aCBhIHByZXZpZXdBY3Rpb25JdGVt
cyBhcnJheS4gSWYgc28sCisgICAgLy8gd2UgbmVlZCB0byBjb252ZXJ0IGVhY2ggVUlQcmV2aWV3
QWN0aW9uSXRlbSBpbnRvIGEgVUlBY3Rpb24uCisgICAgaWYgKHByZXZpZXdWaWV3Q29udHJvbGxl
cikgeworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAg
ICBOU0FycmF5PGlkPFVJUHJldmlld0FjdGlvbkl0ZW0+PiAqcHJldmlld0FjdGlvbnMgPSBwcmV2
aWV3Vmlld0NvbnRyb2xsZXIucHJldmlld0FjdGlvbkl0ZW1zOworICAgICAgICBmb3IgKFVJUHJl
dmlld0FjdGlvbiAqcHJldmlld0FjdGlvbiBpbiBwcmV2aWV3QWN0aW9ucykKKyAgICAgICAgICAg
IFthY3Rpb25zIGFkZE9iamVjdDp1aUFjdGlvbkZvclByZXZpZXdBY3Rpb24ocHJldmlld0FjdGlv
biwgcHJldmlld1ZpZXdDb250cm9sbGVyKV07CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0VORAorICAgIH0KKworICAgIGlmICghW2FjdGlvbnMgY291bnRdKSB7CisgICAg
ICAgIC8vIFdlIGVpdGhlciBkaWRuJ3QgZ2V0IGEgY3VzdG9tIHByZXZpZXcgVUlWaWV3Q29udHJv
bGxlciwgb3IgaXQgZGlkbid0IHByb3ZpZGUgYW55IGFjdGlvbnMKKyAgICAgICAgLy8gc28gd2Ug
c2hvdWxkIHVzZSB0aGUgZGVmYXVsdCBzZXQuCisgICAgICAgIGZvciAoX1dLRWxlbWVudEFjdGlv
biAqZWxlbWVudEFjdGlvbiBpbiBkZWZhdWx0RWxlbWVudEFjdGlvbnMuZ2V0KCkpIHsKKyAgICAg
ICAgICAgIFVJSW1hZ2UgKmltYWdlID0gW19XS0VsZW1lbnRBY3Rpb24gaW1hZ2VGb3JFbGVtZW50
QWN0aW9uVHlwZTplbGVtZW50QWN0aW9uLnR5cGVdOworCisgICAgICAgICAgICBbYWN0aW9ucyBh
ZGRPYmplY3Q6W1VJQWN0aW9uIGFjdGlvbldpdGhUaXRsZTplbGVtZW50QWN0aW9uLnRpdGxlIGlt
YWdlOmltYWdlIGlkZW50aWZpZXI6bmlsIGhhbmRsZXI6XihVSUFjdGlvbiAqKSB7CisgICAgICAg
ICAgICAgICAgW2VsZW1lbnRBY3Rpb24gcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOmVsZW1lbnRJ
bmZvLmdldCgpXTsKKyAgICAgICAgICAgIH1dXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBhY3Rpb25zOworfQorCitzdGF0aWMgVUlNZW51ICptZW51RnJvbVByZXZpZXdPckRlZmF1
bHRzKFVJVmlld0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJvbGxlciwgY29uc3QgUmV0YWlu
UHRyPE5TQXJyYXk+JiBkZWZhdWx0RWxlbWVudEFjdGlvbnMsIFJldGFpblB0cjxfV0tBY3RpdmF0
ZWRFbGVtZW50SW5mbz4gZWxlbWVudEluZm8sIE5TU3RyaW5nICp0aXRsZSkKK3sKKyAgICBhdXRv
IGFjdGlvbnMgPSBtZW51RWxlbWVudHNGcm9tUHJldmlld09yRGVmYXVsdHMocHJldmlld1ZpZXdD
b250cm9sbGVyLCBkZWZhdWx0RWxlbWVudEFjdGlvbnMsIGVsZW1lbnRJbmZvKTsKKyAgICByZXR1
cm4gW1VJTWVudSBtZW51V2l0aFRpdGxlOnRpdGxlIGNoaWxkcmVuOmFjdGlvbnNdOworfQorCitz
dGF0aWMgTlNTdHJpbmcgKnRpdGxlRm9yTWVudShib29sIGlzTGluaywgYm9vbCBzaG93TGlua1By
ZXZpZXdzLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBpZiAo
aXNMaW5rICYmICFzaG93TGlua1ByZXZpZXdzKSB7CisgICAgICAgIGlmICghdXJsLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgaWYgKFdURjo6cHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklOR19LRVkoIkphdmFTY3JpcHQiLCAiSmF2
YVNjcmlwdCBBY3Rpb24gU2hlZXQgVGl0bGUiLCAiVGl0bGUgZm9yIGFjdGlvbiBzaGVldCBmb3Ig
SmF2YVNjcmlwdCBsaW5rIik7CisgICAgICAgICAgICByZXR1cm4gV1RGOjp1c2VyVmlzaWJsZVN0
cmluZyh1cmwpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghaXNMaW5rICYmICF0aXRsZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0aXRsZTsKKworICAgIHJldHVybiBuaWw7Cit9CisK
Ky0gKHZvaWQpYXNzaWduTGVnYWN5RGF0YUZvckNvbnRleHRNZW51SW50ZXJhY3Rpb24KK3sKKyAg
ICBBU1NFUlQoIV9jb250ZXh0TWVudUhhc1JlcXVlc3RlZExlZ2FjeURhdGEpOworICAgIGlmIChf
Y29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRhKQorICAgICAgICByZXR1cm47CisgICAg
X2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSA9IFlFUzsKKworICAgIGlmICghX3dl
YlZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHVpRGVsZWdhdGUgPSBzdGF0aWNfY2Fz
dDxpZDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oX3dlYlZpZXcuVUlEZWxlZ2F0ZSk7CisgICAgaWYg
KCF1aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBhdXRvJiB1cmwgPSBf
cG9zaXRpb25JbmZvcm1hdGlvbi51cmw7CisKKyAgICBfcGFnZS0+c3RhcnRJbnRlcmFjdGlvbldp
dGhFbGVtZW50QXRQb3NpdGlvbihfcG9zaXRpb25JbmZvcm1hdGlvbi5yZXF1ZXN0LnBvaW50KTsK
KworICAgIFVJVmlld0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJvbGxlciA9IG5pbDsKKwor
ICAgIGF1dG8gZWxlbWVudEluZm8gPSBhZG9wdE5TKFtbX1dLQWN0aXZhdGVkRWxlbWVudEluZm8g
YWxsb2NdIF9pbml0V2l0aEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOl9wb3NpdGlv
bkluZm9ybWF0aW9uXSk7CisKKyAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rKSB7
CisgICAgICAgIF9sb25nUHJlc3NDYW5DbGljayA9IE5POworCisgICAgICAgIFJldGFpblB0cjxO
U0FycmF5PF9XS0VsZW1lbnRBY3Rpb24gKj4+IGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudCA9
IFtfYWN0aW9uU2hlZXRBc3Npc3RhbnQgZGVmYXVsdEFjdGlvbnNGb3JMaW5rU2hlZXQ6ZWxlbWVu
dEluZm8uZ2V0KCldOworCisgICAgICAgIC8vIEZJWE1FOiBBbmltYXRlZCBpbWFnZXMgZ28gaGVy
ZS4KKworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAg
ICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnBy
ZXZpZXdpbmdWaWV3Q29udHJvbGxlckZvckVsZW1lbnQ6ZGVmYXVsdEFjdGlvbnM6KV0pIHsKKyAg
ICAgICAgICAgIGF1dG8gZGVmYXVsdEFjdGlvbnMgPSB3a1ByZXZpZXdBY3Rpb25zRnJvbUVsZW1l
bnRBY3Rpb25zKGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudC5nZXQoKSwgZWxlbWVudEluZm8u
Z2V0KCkpOworICAgICAgICAgICAgYXV0byBwcmV2aWV3RWxlbWVudEluZm8gPSBhZG9wdE5TKFtb
V0tQcmV2aWV3RWxlbWVudEluZm8gYWxsb2NdIF9pbml0V2l0aExpbmtVUkw6dXJsXSk7CisgICAg
ICAgICAgICBwcmV2aWV3Vmlld0NvbnRyb2xsZXIgPSBbdWlEZWxlZ2F0ZSB3ZWJWaWV3Ol93ZWJW
aWV3IHByZXZpZXdpbmdWaWV3Q29udHJvbGxlckZvckVsZW1lbnQ6cHJldmlld0VsZW1lbnRJbmZv
LmdldCgpIGRlZmF1bHRBY3Rpb25zOmRlZmF1bHRBY3Rpb25zXTsKKyAgICAgICAgfSBlbHNlIGlm
IChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnByZXZp
ZXdWaWV3Q29udHJvbGxlckZvclVSTDpkZWZhdWx0QWN0aW9uczplbGVtZW50SW5mbzopXSkKKyAg
ICAgICAgICAgIHByZXZpZXdWaWV3Q29udHJvbGxlciA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93
ZWJWaWV3IHByZXZpZXdWaWV3Q29udHJvbGxlckZvclVSTDp1cmwgZGVmYXVsdEFjdGlvbnM6ZGVm
YXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50LmdldCgpIGVsZW1lbnRJbmZvOmVsZW1lbnRJbmZvLmdl
dCgpXTsKKyAgICAgICAgZWxzZSBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2ViVmlldzpwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JVUkw6KV0pCisgICAgICAg
ICAgICBwcmV2aWV3Vmlld0NvbnRyb2xsZXIgPSBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmll
dyBwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JVUkw6dXJsXTsKKyAgICAgICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECisKKyNpZiBVU0UoREFUQV9ERVRFQ1RPUlNfRk9SX0RFRkFV
TFRfUFJFVklFVykKKyAgICAgICAgLy8gUHJldmlvdXNseSwgVUlQcmV2aWV3SXRlbUNvbnRyb2xs
ZXIgd291bGQgZGV0ZWN0IHRoZSBjYXNlIHdoZXJlIHRoZXJlIHdhcyBubyBwcmV2aWV3Vmlld0Nv
bnRyb2xsZXIKKyAgICAgICAgLy8gYW5kIGNyZWF0ZSBvbmUuIFdlIG5lZWQgdG8gcmVwbGljYXRl
IHRoaXMgY29kZSBmb3IgdGhlIG5ldyBBUEkuCisgICAgICAgIGlmICghcHJldmlld1ZpZXdDb250
cm9sbGVyKSB7CisgICAgICAgICAgICBhdXRvIGRkQ29udGV4dE1lbnVBY3Rpb25DbGFzcyA9IGdl
dEREQ29udGV4dE1lbnVBY3Rpb25DbGFzcygpOworICAgICAgICAgICAgaWYgKFtkZENvbnRleHRN
ZW51QWN0aW9uQ2xhc3MgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb250ZXh0TWVudUNv
bmZpZ3VyYXRpb25Gb3JVUkw6aWRlbnRpZmllcjpzZWxlY3RlZFRleHQ6cmVzdWx0czppblZpZXc6
Y29udGV4dDptZW51SWRlbnRpZmllcjopXSkgeworICAgICAgICAgICAgICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKyAgICAgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmNvbnRleHQg
PSBbc2VsZiBkYXRhRGV0ZWN0aW9uQ29udGV4dEZvclBvc2l0aW9uSW5mb3JtYXRpb246X3Bvc2l0
aW9uSW5mb3JtYXRpb25dOworICAgICAgICAgICAgICAgIFJldGFpblB0cjxVSUNvbnRleHRNZW51
Q29uZmlndXJhdGlvbj4gZGF0YURldGVjdG9yc1Jlc3VsdCA9IFtkZENvbnRleHRNZW51QWN0aW9u
Q2xhc3MgY29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yVVJMOnVybCBpZGVudGlmaWVyOl9wb3Np
dGlvbkluZm9ybWF0aW9uLmRhdGFEZXRlY3RvcklkZW50aWZpZXIgc2VsZWN0ZWRUZXh0OnNlbGYu
c2VsZWN0ZWRUZXh0IHJlc3VsdHM6X3Bvc2l0aW9uSW5mb3JtYXRpb24uZGF0YURldGVjdG9yUmVz
dWx0cy5nZXQoKSBpblZpZXc6c2VsZiBjb250ZXh0OmNvbnRleHQgbWVudUlkZW50aWZpZXI6bmls
XTsKKyAgICAgICAgICAgICAgICBpZiAoX3Nob3dMaW5rUHJldmlld3MgJiYgZGF0YURldGVjdG9y
c1Jlc3VsdCAmJiBkYXRhRGV0ZWN0b3JzUmVzdWx0LmdldCgpLnByZXZpZXdQcm92aWRlcikKKyAg
ICAgICAgICAgICAgICAgICAgX2NvbnRleHRNZW51TGVnYWN5UHJldmlld0NvbnRyb2xsZXIgPSBk
YXRhRGV0ZWN0b3JzUmVzdWx0LmdldCgpLnByZXZpZXdQcm92aWRlcigpOworICAgICAgICAgICAg
ICAgIGlmIChkYXRhRGV0ZWN0b3JzUmVzdWx0ICYmIGRhdGFEZXRlY3RvcnNSZXN1bHQuZ2V0KCku
YWN0aW9uUHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBtZW51RWxlbWVudHMg
PSBtZW51RWxlbWVudHNGcm9tUHJldmlld09yRGVmYXVsdHMobmlsLCBkZWZhdWx0QWN0aW9uc0Zy
b21Bc3Npc3RhbnQsIGVsZW1lbnRJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgX2NvbnRleHRN
ZW51TGVnYWN5TWVudSA9IGRhdGFEZXRlY3RvcnNSZXN1bHQuZ2V0KCkuYWN0aW9uUHJvdmlkZXIo
bWVudUVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYXV0byBtZW51VGl0bGUgPSB0aXRsZUZvck1l
bnUodHJ1ZSwgX3Nob3dMaW5rUHJldmlld3MsIHVybCwgX3Bvc2l0aW9uSW5mb3JtYXRpb24udGl0
bGUpOworICAgICAgICBfY29udGV4dE1lbnVMZWdhY3lNZW51ID0gbWVudUZyb21QcmV2aWV3T3JE
ZWZhdWx0cyhwcmV2aWV3Vmlld0NvbnRyb2xsZXIsIGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFu
dCwgZWxlbWVudEluZm8sIG1lbnVUaXRsZSk7CisKKyAgICB9IGVsc2UgaWYgKF9wb3NpdGlvbklu
Zm9ybWF0aW9uLmlzSW1hZ2UpIHsKKyAgICAgICAgTlNVUkwgKm5zVVJMID0gKE5TVVJMICopdXJs
OworICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBpbWFnZUluZm87CisgICAgICAgIEFT
U0VSVChfcG9zaXRpb25JbmZvcm1hdGlvbi5pbWFnZSk7CisgICAgICAgIGF1dG8gY2dJbWFnZSA9
IF9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdlLT5tYWtlQ0dJbWFnZUNvcHkoKTsKKyAgICAgICAg
YXV0byB1aUltYWdlID0gYWRvcHROUyhbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpj
Z0ltYWdlLmdldCgpXSk7CisKKyAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6YWx0ZXJuYXRlVVJMRnJvbUltYWdlOnVzZXJJbmZvOild
KSB7CisgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvOworICAgICAgICAgICAgbnNV
UkwgPSBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBhbHRlcm5hdGVVUkxGcm9tSW1hZ2U6
dWlJbWFnZS5nZXQoKSB1c2VySW5mbzomdXNlckluZm9dOworICAgICAgICAgICAgaW1hZ2VJbmZv
ID0gdXNlckluZm87CisgICAgICAgIH0KKworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19CRUdJTgorICAgICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfd2ViVmlldzp3aWxsUHJldmlld0ltYWdlV2l0aFVSTDopXSkKKyAgICAgICAg
ICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IHdpbGxQcmV2aWV3SW1hZ2VXaXRoVVJM
Ol9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdlVVJMXTsKKworICAgICAgICBSZXRhaW5QdHI8TlNB
cnJheTxfV0tFbGVtZW50QWN0aW9uICo+PiBkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQgPSBb
X2FjdGlvblNoZWV0QXNzaXN0YW50IGRlZmF1bHRBY3Rpb25zRm9ySW1hZ2VTaGVldDplbGVtZW50
SW5mby5nZXQoKV07CisKKyAgICAgICAgaWYgKGltYWdlSW5mbyAmJiBbdWlEZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnByZXZpZXdWaWV3Q29udHJvbGxlckZv
ckltYWdlOmFsdGVybmF0ZVVSTDpkZWZhdWx0QWN0aW9uczplbGVtZW50SW5mbzopXSkKKyAgICAg
ICAgICAgIHByZXZpZXdWaWV3Q29udHJvbGxlciA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJW
aWV3IHByZXZpZXdWaWV3Q29udHJvbGxlckZvckltYWdlOnVpSW1hZ2UuZ2V0KCkgYWx0ZXJuYXRl
VVJMOm5zVVJMIGRlZmF1bHRBY3Rpb25zOmRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudC5nZXQo
KSBlbGVtZW50SW5mbzplbGVtZW50SW5mby5nZXQoKV07CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHByZXZpZXdWaWV3Q29udHJvbGxlciA9IFtbV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxl
ciBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmNnSW1hZ2UgZGVmYXVsdEFjdGlvbnM6ZGVmYXVsdEFj
dGlvbnNGcm9tQXNzaXN0YW50LmdldCgpIGVsZW1lbnRJbmZvOmVsZW1lbnRJbmZvLmdldCgpXTsK
KyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisKKyAgICAgICAgYXV0
byBtZW51VGl0bGUgPSB0aXRsZUZvck1lbnUoZmFsc2UsIF9zaG93TGlua1ByZXZpZXdzLCB1cmws
IF9wb3NpdGlvbkluZm9ybWF0aW9uLnRpdGxlKTsKKyAgICAgICAgX2NvbnRleHRNZW51TGVnYWN5
TWVudSA9IG1lbnVGcm9tUHJldmlld09yRGVmYXVsdHMocHJldmlld1ZpZXdDb250cm9sbGVyLCBk
ZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQsIGVsZW1lbnRJbmZvLCBtZW51VGl0bGUpOworICAg
IH0KKworICAgIF9jb250ZXh0TWVudUxlZ2FjeVByZXZpZXdDb250cm9sbGVyID0gX3Nob3dMaW5r
UHJldmlld3MgPyBwcmV2aWV3Vmlld0NvbnRyb2xsZXIgOiBudWxscHRyOwogfQogCistIChVSUNv
bnRleHRNZW51Q29uZmlndXJhdGlvbiAqKWNvbnRleHRNZW51SW50ZXJhY3Rpb246KFVJQ29udGV4
dE1lbnVJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIGNvbmZpZ3VyYXRpb25Gb3JNZW51QXRMb2Nh
dGlvbjooQ0dQb2ludClsb2NhdGlvbgoreworICAgIC8vIFJlcXVpcmVkIHRvIGNvbmZvcm0gdG8g
VUlDb250ZXh0TWVudUludGVyYWN0aW9uRGVsZWdhdGUsIGJ1dCBTUEkgdmVyc2lvbiBzaG91bGQg
YmUgY2FsbGVkIGluc3RlYWQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAodm9pZClfY29udGV4dE1lbnVJbnRlcmFjdGlvbjooVUlDb250ZXh0TWVu
dUludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gY29uZmlndXJhdGlvbkZvck1lbnVBdExvY2F0aW9u
OihDR1BvaW50KWxvY2F0aW9uIGNvbXBsZXRpb246KHZvaWQoXikoVUlDb250ZXh0TWVudUNvbmZp
Z3VyYXRpb24gKikpY29tcGxldGlvbgoreworICAgIGlmICghX3dlYlZpZXcpCisgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uKG5pbCk7CisKKyAgICBjb25zdCBhdXRvIHBvc2l0aW9uID0gW2ludGVy
YWN0aW9uIGxvY2F0aW9uSW5WaWV3OnNlbGZdOworICAgIFdlYktpdDo6SW50ZXJhY3Rpb25JbmZv
cm1hdGlvblJlcXVlc3QgcmVxdWVzdCB7IFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChwb3NpdGlv
bikgfTsKKyAgICByZXF1ZXN0LmluY2x1ZGVTbmFwc2hvdCA9IHRydWU7CisgICAgcmVxdWVzdC5p
bmNsdWRlTGlua0luZGljYXRvciA9IHRydWU7CisKKyAgICBbc2VsZiBkb0FmdGVyUG9zaXRpb25J
bmZvcm1hdGlvblVwZGF0ZTpbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS0NvbnRlbnRWaWV3Pihz
ZWxmKSwgY29tcGxldGlvbiA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKV0gKFdlYktpdDo6SW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24pIHsKKyAgICAgICAgYXV0byBzdHJvbmdTZWxm
ID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGlmICghc3Ryb25nU2VsZikKKyAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisgICAgICAgIFtzdHJvbmdTZWxmIGNvbnRpbnVlQ29u
dGV4dE1lbnVJbnRlcmFjdGlvbjpjb21wbGV0aW9uLmdldCgpXTsKKyAgICB9IGZvclJlcXVlc3Q6
cmVxdWVzdF07Cit9CisKKy0gKHZvaWQpY29udGludWVDb250ZXh0TWVudUludGVyYWN0aW9uOih2
b2lkKF4pKFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uICopKWNvbXBsZXRpb24KK3sKKyAgICBp
ZiAoIV9wb3NpdGlvbkluZm9ybWF0aW9uLmlzTGluayAmJiAhX3Bvc2l0aW9uSW5mb3JtYXRpb24u
aXNJbWFnZSAmJiAhX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNBdHRhY2htZW50KQorICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbihuaWwpOworCisgICAgVVJMIGxpbmtVUkwgPSBfcG9zaXRpb25JbmZv
cm1hdGlvbi51cmw7CisKKyAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rICYmIGxp
bmtVUkwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworCisgICAg
YXV0byB1aURlbGVnYXRlID0gc3RhdGljX2Nhc3Q8aWQ8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KF93
ZWJWaWV3LlVJRGVsZWdhdGUpOworICAgIGlmICghdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb24obmlsKTsKKworICAgIGlmIChuZWVkc0RlcHJlY2F0ZWRQcmV2aWV3QVBJKHVp
RGVsZWdhdGUpKSB7CisKKyAgICAgICAgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmlzTGluaykg
eworICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAg
ICAgICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZp
ZXc6c2hvdWxkUHJldmlld0VsZW1lbnQ6KV0pIHsKKyAgICAgICAgICAgICAgICBhdXRvIHByZXZp
ZXdFbGVtZW50SW5mbyA9IGFkb3B0TlMoW1tXS1ByZXZpZXdFbGVtZW50SW5mbyBhbGxvY10gX2lu
aXRXaXRoTGlua1VSTDpsaW5rVVJMXSk7CisgICAgICAgICAgICAgICAgaWYgKCFbdWlEZWxlZ2F0
ZSB3ZWJWaWV3Ol93ZWJWaWV3IHNob3VsZFByZXZpZXdFbGVtZW50OnByZXZpZXdFbGVtZW50SW5m
by5nZXQoKV0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19F
TkQKKworICAgICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgSmF2YVNjcmlwdCB1cmxzIGhlcmUu
IEJ1dCBtYWtlIHN1cmUgdGhleSBkb24ndCBzaG93IGEgcHJldmlldy4KKyAgICAgICAgICAgIC8v
IDxyZGFyOi8vcHJvYmxlbS81MDU3MjI4Mz4KKyAgICAgICAgICAgIGlmICghbGlua1VSTC5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAg
ICAgICAgICAgICAgaWYgKCFXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpjYW5CZVByZXNlbnRlZEJ5
RGF0YURldGVjdG9ycyhsaW5rVVJMKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb24obmlsKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
X2NvbnRleHRNZW51TGVnYWN5UHJldmlld0NvbnRyb2xsZXIgPSBudWxscHRyOworICAgICAgICBf
Y29udGV4dE1lbnVMZWdhY3lNZW51ID0gbnVsbHB0cjsKKyAgICAgICAgX2NvbnRleHRNZW51SGFz
UmVxdWVzdGVkTGVnYWN5RGF0YSA9IE5POworCisgICAgICAgIFVJQ29udGV4dE1lbnVBY3Rpb25Q
cm92aWRlciBhY3Rpb25NZW51UHJvdmlkZXIgPSBbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS0Nv
bnRlbnRWaWV3PihzZWxmKV0gKE5TQXJyYXk8VUlNZW51RWxlbWVudCAqPiAqc3VnZ2VzdGVkQWN0
aW9ucykgLT4gVUlNZW51ICogeworICAgICAgICAgICAgYXV0byBzdHJvbmdTZWxmID0gd2Vha1Nl
bGYuZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXN0cm9uZ1NlbGYpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAgICAgICAgIGlmICghc3Ryb25nU2VsZi0+X2NvbnRleHRNZW51SGFz
UmVxdWVzdGVkTGVnYWN5RGF0YSkKKyAgICAgICAgICAgICAgICBbc3Ryb25nU2VsZiBhc3NpZ25M
ZWdhY3lEYXRhRm9yQ29udGV4dE1lbnVJbnRlcmFjdGlvbl07CisKKyAgICAgICAgICAgIHJldHVy
biBzdHJvbmdTZWxmLT5fY29udGV4dE1lbnVMZWdhY3lNZW51LmdldCgpOworICAgICAgICB9Owor
CisgICAgICAgIFVJQ29udGV4dE1lbnVDb250ZW50UHJldmlld1Byb3ZpZGVyIGNvbnRlbnRQcmV2
aWV3UHJvdmlkZXIgPSBbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS0NvbnRlbnRWaWV3PihzZWxm
KV0gKCkgLT4gVUlWaWV3Q29udHJvbGxlciAqIHsKKyAgICAgICAgICAgIGF1dG8gc3Ryb25nU2Vs
ZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICAgICAgaWYgKCFzdHJvbmdTZWxmKQorICAgICAg
ICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICBpZiAoIXN0cm9uZ1NlbGYtPl9jb250
ZXh0TWVudUhhc1JlcXVlc3RlZExlZ2FjeURhdGEpCisgICAgICAgICAgICAgICAgW3N0cm9uZ1Nl
bGYgYXNzaWduTGVnYWN5RGF0YUZvckNvbnRleHRNZW51SW50ZXJhY3Rpb25dOworCisgICAgICAg
ICAgICByZXR1cm4gc3Ryb25nU2VsZi0+X2NvbnRleHRNZW51TGVnYWN5UHJldmlld0NvbnRyb2xs
ZXIuZ2V0KCk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBwcm92
aWRlIGFuIGlkZW50aWZpZXIgYW5kIEFTU0VSVCBpbiBkZWxlZ2F0ZXMgaWYgd2UgZG9uJ3QgbWF0
Y2g/CisgICAgICAgIHJldHVybiBjb21wbGV0aW9uKFtVSUNvbnRleHRNZW51Q29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uV2l0aElkZW50aWZpZXI6bmlsIHByZXZpZXdQcm92aWRlcjpjb250ZW50
UHJldmlld1Byb3ZpZGVyIGFjdGlvblByb3ZpZGVyOmFjdGlvbk1lbnVQcm92aWRlcl0pOworICAg
IH0KKworICAgIGF1dG8gY29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKFtjb21wbGV0aW9u
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pLCBsaW5rVVJMID0gV1RGTW92ZShsaW5rVVJMKSwg
d2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS0NvbnRlbnRWaWV3PihzZWxmKV0gKFVJQ29udGV4dE1l
bnVDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uRnJvbVdLVUlEZWxlZ2F0ZSkgbXV0YWJsZSB7
CisKKyAgICAgICAgYXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGlm
ICghc3Ryb25nU2VsZikKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisKKyAg
ICAgICAgaWYgKCFjb25maWd1cmF0aW9uRnJvbVdLVUlEZWxlZ2F0ZSkgeworCisgICAgICAgICAg
ICBzdHJvbmdTZWxmLT5fY29udGV4dE1lbnVFbGVtZW50SW5mbyA9IG5pbDsKKworICAgICAgICAg
ICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIG9iamVjdCB3ZSBtaWdodCB3YW50IHRvIHNo
b3cgYSBjb250ZXh0IG1lbnUgZm9yLCBidXQgdGhlCisgICAgICAgICAgICAvLyBjbGllbnQgd2Fz
IHVuYWJsZSB0byBoYW5kbGUgaXQuIEJlZm9yZSBnaXZpbmcgdXAsIHdlIGFzayBEYXRhRGV0ZWN0
b3JzLgorCisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICAgICAgLy8gRklYTUU6
IFN1cHBvcnQgSmF2YVNjcmlwdCB1cmxzIGhlcmUuIEJ1dCBtYWtlIHN1cmUgdGhleSBkb24ndCBz
aG93IGEgcHJldmlldy4KKyAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81MDU3MjI4Mz4K
KyAgICAgICAgICAgIGlmICghbGlua1VSTC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgJiYgIVdl
YkNvcmU6OkRhdGFEZXRlY3Rpb246OmNhbkJlUHJlc2VudGVkQnlEYXRhRGV0ZWN0b3JzKGxpbmtV
UkwpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisKKyAgICAgICAg
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAgICAgICAgIGF1dG8gZGRDb250
ZXh0TWVudUFjdGlvbkNsYXNzID0gZ2V0RERDb250ZXh0TWVudUFjdGlvbkNsYXNzKCk7CisgICAg
ICAgICAgICBpZiAoW2RkQ29udGV4dE1lbnVBY3Rpb25DbGFzcyByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGNvbnRleHRNZW51Q29uZmlndXJhdGlvbldpdGhVUkw6aW5WaWV3OmNvbnRleHQ6
bWVudUlkZW50aWZpZXI6KV0pIHsKKyAgICAgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmNvbnRl
eHQgPSBbc3Ryb25nU2VsZiBkYXRhRGV0ZWN0aW9uQ29udGV4dEZvclBvc2l0aW9uSW5mb3JtYXRp
b246c3Ryb25nU2VsZi0+X3Bvc2l0aW9uSW5mb3JtYXRpb25dOworICAgICAgICAgICAgICAgIFVJ
Q29udGV4dE1lbnVDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uRnJvbUREID0gW2RkQ29udGV4
dE1lbnVBY3Rpb25DbGFzcyBjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JVUkw6bGlua1VSTCBp
ZGVudGlmaWVyOnN0cm9uZ1NlbGYtPl9wb3NpdGlvbkluZm9ybWF0aW9uLmRhdGFEZXRlY3Rvcklk
ZW50aWZpZXIgc2VsZWN0ZWRUZXh0OltzdHJvbmdTZWxmIHNlbGVjdGVkVGV4dF0gcmVzdWx0czpz
dHJvbmdTZWxmLT5fcG9zaXRpb25JbmZvcm1hdGlvbi5kYXRhRGV0ZWN0b3JSZXN1bHRzLmdldCgp
IGluVmlldzpzdHJvbmdTZWxmLmdldCgpIGNvbnRleHQ6Y29udGV4dCBtZW51SWRlbnRpZmllcjpu
aWxdOworICAgICAgICAgICAgICAgIGlmIChzdHJvbmdTZWxmLT5fc2hvd0xpbmtQcmV2aWV3cykK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24oY29uZmlndXJhdGlvbkZyb21E
RCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24oW1VJQ29udGV4dE1lbnVDb25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb25XaXRoSWRlbnRpZmllcjpbY29uZmlndXJhdGlvbkZyb21E
RCBpZGVudGlmaWVyXSBwcmV2aWV3UHJvdmlkZXI6W2NvbmZpZ3VyYXRpb25Gcm9tREQgcHJldmll
d1Byb3ZpZGVyXSBhY3Rpb25Qcm92aWRlcjpbY29uZmlndXJhdGlvbkZyb21ERCBhY3Rpb25Qcm92
aWRlcl1dKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZDxOU0NvcHlpbmc+IGlkZW50aWZpZXIgPSBbY29uZmlndXJhdGlv
bkZyb21XS1VJRGVsZWdhdGUgaWRlbnRpZmllcl07CisgICAgICAgIFVJQ29udGV4dE1lbnVDb250
ZW50UHJldmlld1Byb3ZpZGVyIGNvbnRlbnRQcmV2aWV3UHJvdmlkZXIgPSBbY29uZmlndXJhdGlv
bkZyb21XS1VJRGVsZWdhdGUgcHJldmlld1Byb3ZpZGVyXTsKKyAgICAgICAgVUlDb250ZXh0TWVu
dUFjdGlvblByb3ZpZGVyIGFjdGlvbk1lbnVQcm92aWRlciA9IFtjb25maWd1cmF0aW9uRnJvbVdL
VUlEZWxlZ2F0ZSBhY3Rpb25Qcm92aWRlcl07CisKKyAgICAgICAgYXV0byBhY3Rpb25Qcm92aWRl
cldyYXBwZXIgPSBbYWN0aW9uUHJvdmlkZXJGcm9tVUlEZWxlZ2F0ZSA9IG1ha2VCbG9ja1B0cihh
Y3Rpb25NZW51UHJvdmlkZXIpLCB3ZWFrU2VsZiA9IFdURk1vdmUod2Vha1NlbGYpXSAoTlNBcnJh
eTxVSU1lbnVFbGVtZW50ICo+ICpzdWdnZXN0ZWRBY3Rpb25zKSAtPiBVSU1lbnUgKiB7CisgICAg
ICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgICAgIGlm
ICghc3Ryb25nU2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAg
ICBhdXRvIGVsZW1lbnRJbmZvID0gYWRvcHROUyhbW19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvIGFs
bG9jXSBfaW5pdFdpdGhJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjpzdHJvbmdTZWxm
LT5fcG9zaXRpb25JbmZvcm1hdGlvbl0pOworICAgICAgICAgICAgUmV0YWluUHRyPE5TQXJyYXk8
X1dLRWxlbWVudEFjdGlvbiAqPj4gZGVmYXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50ID0gc3Ryb25n
U2VsZi0+X3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rID8gW3N0cm9uZ1NlbGYtPl9hY3Rpb25T
aGVldEFzc2lzdGFudCBkZWZhdWx0QWN0aW9uc0ZvckxpbmtTaGVldDplbGVtZW50SW5mby5nZXQo
KV0gOiBbc3Ryb25nU2VsZi0+X2FjdGlvblNoZWV0QXNzaXN0YW50IGRlZmF1bHRBY3Rpb25zRm9y
SW1hZ2VTaGVldDplbGVtZW50SW5mby5nZXQoKV07CisKKyAgICAgICAgICAgIGF1dG8gbWVudUVs
ZW1lbnRzID0gbWVudUVsZW1lbnRzRnJvbVByZXZpZXdPckRlZmF1bHRzKG5pbCwgZGVmYXVsdEFj
dGlvbnNGcm9tQXNzaXN0YW50LCBlbGVtZW50SW5mbyk7CisKKyAgICAgICAgICAgIGlmIChhY3Rp
b25Qcm92aWRlckZyb21VSURlbGVnYXRlKQorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25Q
cm92aWRlckZyb21VSURlbGVnYXRlKG1lbnVFbGVtZW50cyk7CisKKyAgICAgICAgICAgIGF1dG8g
dGl0bGUgPSB0aXRsZUZvck1lbnUoc3Ryb25nU2VsZi0+X3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNM
aW5rLCBzdHJvbmdTZWxmLT5fc2hvd0xpbmtQcmV2aWV3cywgc3Ryb25nU2VsZi0+X3Bvc2l0aW9u
SW5mb3JtYXRpb24udXJsLCBzdHJvbmdTZWxmLT5fcG9zaXRpb25JbmZvcm1hdGlvbi50aXRsZSk7
CisgICAgICAgICAgICByZXR1cm4gW1VJTWVudSBtZW51V2l0aFRpdGxlOnRpdGxlIGNoaWxkcmVu
Om1lbnVFbGVtZW50c107CisgICAgICAgIH07CisKKyAgICAgICAgY29tcGxldGlvbihbVUlDb250
ZXh0TWVudUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbldpdGhJZGVudGlmaWVyOmlkZW50aWZp
ZXIgcHJldmlld1Byb3ZpZGVyOmNvbnRlbnRQcmV2aWV3UHJvdmlkZXIgYWN0aW9uUHJvdmlkZXI6
YWN0aW9uUHJvdmlkZXJXcmFwcGVyXSk7CisgICAgfSk7CisKKyAgICBfY29udGV4dE1lbnVFbGVt
ZW50SW5mbyA9IHdyYXBwZXIoQVBJOjpDb250ZXh0TWVudUVsZW1lbnRJbmZvOjpjcmVhdGUoX3Bv
c2l0aW9uSW5mb3JtYXRpb24pKTsKKyAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVtZW50
OmNvbXBsZXRpb25IYW5kbGVyOildKSB7CisgICAgICAgIGF1dG8gY2hlY2tlciA9IFdlYktpdDo6
Q29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKHVpRGVsZWdhdGUsIEBzZWxlY3Rv
cihfd2ViVmlldzpjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVtZW50OmNvbXBsZXRpb25I
YW5kbGVyOikpOworICAgICAgICBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBjb250ZXh0
TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVtZW50Ol9jb250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgp
IGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkJsb2NrID0gV1RGTW92
ZShjb21wbGV0aW9uQmxvY2spLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKFVJQ29udGV4
dE1lbnVDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoY2hl
Y2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7
CisgICAgICAgICAgICBjb21wbGV0aW9uQmxvY2soY29uZmlndXJhdGlvbik7CisgICAgICAgIH0p
LmdldCgpXTsKKyAgICB9IGVsc2UgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmlzTGluayAmJiBb
dWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1l
bnVDb25maWd1cmF0aW9uRm9yRWxlbWVudDpjb21wbGV0aW9uSGFuZGxlcjopXSkgeworICAgICAg
ICBhdXRvIGNoZWNrZXIgPSBXZWJLaXQ6OkNvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNy
ZWF0ZSh1aURlbGVnYXRlLCBAc2VsZWN0b3Iod2ViVmlldzpjb250ZXh0TWVudUNvbmZpZ3VyYXRp
b25Gb3JFbGVtZW50OmNvbXBsZXRpb25IYW5kbGVyOikpOworICAgICAgICBbdWlEZWxlZ2F0ZSB3
ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51Q29uZmlndXJhdGlvbkZvckVsZW1lbnQ6X2NvbnRl
eHRNZW51RWxlbWVudEluZm8uZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtj
b21wbGV0aW9uQmxvY2sgPSBXVEZNb3ZlKGNvbXBsZXRpb25CbG9jayksIGNoZWNrZXIgPSBXVEZN
b3ZlKGNoZWNrZXIpXSAoVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxs
ZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjaGVja2VyLT5kaWRD
YWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25CbG9jayhjb25m
aWd1cmF0aW9uKTsKKyAgICAgICAgfSkuZ2V0KCldOworICAgIH0gZWxzZQorICAgICAgICBjb21w
bGV0aW9uQmxvY2sobmlsKTsKK30KKworc3RhdGljIFJldGFpblB0cjxVSUltYWdlPiB1aUltYWdl
Rm9ySW1hZ2UoV2ViQ29yZTo6SW1hZ2UqIGltYWdlKQoreworICAgIGlmICghaW1hZ2UpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRvIGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2Uo
KTsKKyAgICBpZiAoIWNnSW1hZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4g
YWRvcHROUyhbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpjZ0ltYWdlLmdldCgpXSk7
Cit9CisKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBtZXJnZWQgd2l0aCBjcmVhdGVUYXJnZXRl
ZERyYWdQcmV2aWV3IGluIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS4KK3N0YXRpYyBSZXRhaW5Q
dHI8VUlUYXJnZXRlZFByZXZpZXc+IGNyZWF0ZVRhcmdldGVkUHJldmlldyhVSUltYWdlICppbWFn
ZSwgVUlWaWV3ICpyb290VmlldywgVUlWaWV3ICpwcmV2aWV3Q29udGFpbmVyLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBjb25zdCBWZWN0b3I8
V2ViQ29yZTo6RmxvYXRSZWN0PiYgY2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcywgVUlD
b2xvciAqYmFja2dyb3VuZENvbG9yKQoreworICAgIGlmIChmcmFtZUluUm9vdFZpZXdDb29yZGlu
YXRlcy5pc0VtcHR5KCkgfHwgIWltYWdlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcyA9IFtyb290VmlldyBj
b252ZXJ0UmVjdDpmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlcyB0b1ZpZXc6cHJldmlld0NvbnRh
aW5lcl07CisgICAgaWYgKGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2NhbGluZ1JhdGlv
ID0gZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmlld0Nv
b3JkaW5hdGVzLnNpemUoKTsKKyAgICBOU011dGFibGVBcnJheSAqY2xpcHBpbmdSZWN0VmFsdWVz
SW5GcmFtZUNvb3JkaW5hdGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNs
aXBwaW5nUmVjdHNJbkZyYW1lQ29vcmRpbmF0ZXMuc2l6ZSgpXTsKKworICAgIGZvciAoYXV0byBy
ZWN0IDogY2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcykgeworICAgICAgICByZWN0LnNj
YWxlKHNjYWxpbmdSYXRpbyk7CisgICAgICAgIFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29v
cmRpbmF0ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07CisgICAg
fQorCisgICAgUmV0YWluUHRyPFVJUHJldmlld1BhcmFtZXRlcnM+IHBhcmFtZXRlcnM7CisgICAg
aWYgKGNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcy5jb3VudCkKKyAgICAgICAg
cGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSVByZXZpZXdQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0
aFRleHRMaW5lUmVjdHM6Y2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzXSk7Cisg
ICAgZWxzZQorICAgICAgICBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW1VJUHJldmlld1BhcmFtZXRl
cnMgYWxsb2NdIGluaXRdKTsKKworICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgIFtw
YXJhbWV0ZXJzIHNldEJhY2tncm91bmRDb2xvcjpiYWNrZ3JvdW5kQ29sb3JdOworCisgICAgQ0dQ
b2ludCBjZW50ZXJJbkNvbnRhaW5lckNvb3JkaW5hdGVzID0geyBDR1JlY3RHZXRNaWRYKGZyYW1l
SW5Db250YWluZXJDb29yZGluYXRlcyksIENHUmVjdEdldE1pZFkoZnJhbWVJbkNvbnRhaW5lckNv
b3JkaW5hdGVzKSB9OworICAgIGF1dG8gdGFyZ2V0ID0gYWRvcHROUyhbW1VJUHJldmlld1Rhcmdl
dCBhbGxvY10gaW5pdFdpdGhDb250YWluZXI6cHJldmlld0NvbnRhaW5lciBjZW50ZXI6Y2VudGVy
SW5Db250YWluZXJDb29yZGluYXRlc10pOworCisgICAgYXV0byBpbWFnZVZpZXcgPSBhZG9wdE5T
KFtbVUlJbWFnZVZpZXcgYWxsb2NdIGluaXRXaXRoSW1hZ2U6aW1hZ2VdKTsKKyAgICBbaW1hZ2VW
aWV3IHNldEZyYW1lOmZyYW1lSW5Db250YWluZXJDb29yZGluYXRlc107CisgICAgcmV0dXJuIGFk
b3B0TlMoW1tVSVRhcmdldGVkUHJldmlldyBhbGxvY10gaW5pdFdpdGhWaWV3OmltYWdlVmlldy5n
ZXQoKSBwYXJhbWV0ZXJzOnBhcmFtZXRlcnMuZ2V0KCkgdGFyZ2V0OnRhcmdldC5nZXQoKV0pOwor
fQorCistIChVSVRhcmdldGVkUHJldmlldyAqKV90YXJnZXRlZFByZXZpZXcKK3sKKyAgICBpZiAo
X3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rICYmIF9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJ
bmRpY2F0b3IuY29udGVudEltYWdlKSB7CisgICAgICAgIFtzZWxmIF9zdGFydFN1cHByZXNzaW5n
U2VsZWN0aW9uQXNzaXN0YW50Rm9yUmVhc29uOldlYktpdDo6SW50ZXJhY3Rpb25Jc0hhcHBlbmlu
Z107CisKKyAgICAgICAgYXV0byBpbmRpY2F0b3IgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5r
SW5kaWNhdG9yOworICAgICAgICBhdXRvIHRleHRJbmRpY2F0b3JJbWFnZSA9IHVpSW1hZ2VGb3JJ
bWFnZShpbmRpY2F0b3IuY29udGVudEltYWdlLmdldCgpKTsKKworICAgICAgICByZXR1cm4gY3Jl
YXRlVGFyZ2V0ZWRQcmV2aWV3KHRleHRJbmRpY2F0b3JJbWFnZS5nZXQoKSwgc2VsZiwgc2VsZi51
bnNjYWxlZFZpZXcsIGluZGljYXRvci50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzLCBpbmRpY2F0b3IudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcywgW1VJQ29s
b3IgY29sb3JXaXRoQ0dDb2xvcjpjYWNoZWRDR0NvbG9yKGluZGljYXRvci5lc3RpbWF0ZWRCYWNr
Z3JvdW5kQ29sb3IpXSkuYXV0b3JlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAoKF9wb3NpdGlv
bkluZm9ybWF0aW9uLmlzQXR0YWNobWVudCB8fCBfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0ltYWdl
KSAmJiBfcG9zaXRpb25JbmZvcm1hdGlvbi5pbWFnZSkgeworICAgICAgICBbc2VsZiBfc3RhcnRT
dXBwcmVzc2luZ1NlbGVjdGlvbkFzc2lzdGFudEZvclJlYXNvbjpXZWJLaXQ6OkludGVyYWN0aW9u
SXNIYXBwZW5pbmddOworCisgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0g
X3Bvc2l0aW9uSW5mb3JtYXRpb24uaW1hZ2UtPm1ha2VDR0ltYWdlQ29weSgpOworICAgICAgICBh
dXRvIGltYWdlID0gYWRvcHROUyhbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpjZ0lt
YWdlLmdldCgpXSk7CisKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVRhcmdldGVkUHJldmlldyhpbWFn
ZS5nZXQoKSwgc2VsZiwgc2VsZi51bnNjYWxlZFZpZXcsIF9wb3NpdGlvbkluZm9ybWF0aW9uLmJv
dW5kcywgeyB9LCBuaWwpLmF1dG9yZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIG5pbDsK
K30KKworLSAoVUlUYXJnZXRlZFByZXZpZXcgKiljb250ZXh0TWVudUludGVyYWN0aW9uOihVSUNv
bnRleHRNZW51SW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBwcmV2aWV3Rm9ySGlnaGxpZ2h0aW5n
TWVudVdpdGhDb25maWd1cmF0aW9uOihVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiAqKWNvbmZp
Z3VyYXRpb24KK3sKKyAgICByZXR1cm4gW3NlbGYgX3RhcmdldGVkUHJldmlld107Cit9CisKKy0g
KHZvaWQpY29udGV4dE1lbnVJbnRlcmFjdGlvbldpbGxQcmVzZW50OihVSUNvbnRleHRNZW51SW50
ZXJhY3Rpb24gKilpbnRlcmFjdGlvbgoreworICAgIGlmICghX3dlYlZpZXcpCisgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvIHVpRGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxpZDxXS1VJRGVsZWdhdGVQ
cml2YXRlPj4oX3dlYlZpZXcuVUlEZWxlZ2F0ZSk7CisgICAgaWYgKCF1aURlbGVnYXRlKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3Iod2ViVmlldzpjb250ZXh0TWVudVdpbGxQcmVzZW50Rm9yRWxlbWVudDopXSkKKyAgICAg
ICAgW3VpRGVsZWdhdGUgd2ViVmlldzpfd2ViVmlldyBjb250ZXh0TWVudVdpbGxQcmVzZW50Rm9y
RWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKV07CisgICAgZWxzZSBpZiAoW3Vp
RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb250ZXh0TWVu
dVdpbGxQcmVzZW50Rm9yRWxlbWVudDopXSkgeworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19CRUdJTgorICAgICAgICBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBj
b250ZXh0TWVudVdpbGxQcmVzZW50Rm9yRWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50SW5mby5n
ZXQoKV07CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgIH0K
K30KKworLSAoVUlUYXJnZXRlZFByZXZpZXcgKiljb250ZXh0TWVudUludGVyYWN0aW9uOihVSUNv
bnRleHRNZW51SW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBwcmV2aWV3Rm9yRGlzbWlzc2luZ01l
bnVXaXRoQ29uZmlndXJhdGlvbjooVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKiljb25maWd1
cmF0aW9uCit7CisgICAgcmV0dXJuIFtzZWxmIF90YXJnZXRlZFByZXZpZXddOworfQorCistICh2
b2lkKWNvbnRleHRNZW51SW50ZXJhY3Rpb246KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWlu
dGVyYWN0aW9uIHdpbGxDb21taXRXaXRoQW5pbWF0b3I6KGlkPFVJQ29udGV4dE1lbnVJbnRlcmFj
dGlvbkNvbW1pdEFuaW1hdGluZz4pYW5pbWF0b3IKK3sKKyAgICBpZiAoIV93ZWJWaWV3KQorICAg
ICAgICByZXR1cm47CisKKyAgICBbc2VsZiBfc3RvcFN1cHByZXNzaW5nU2VsZWN0aW9uQXNzaXN0
YW50Rm9yUmVhc29uOldlYktpdDo6SW50ZXJhY3Rpb25Jc0hhcHBlbmluZ107CisKKyAgICBhdXRv
IHVpRGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxpZDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oX3dlYlZp
ZXcuVUlEZWxlZ2F0ZSk7CisgICAgaWYgKCF1aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobmVlZHNEZXByZWNhdGVkUHJldmlld0FQSSh1aURlbGVnYXRlKSkgeworCisgICAg
ICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0ltYWdlKSB7CisgICAgICAgICAgICBpZiAo
W3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb21taXRQ
cmV2aWV3ZWRJbWFnZVdpdGhVUkw6KV0pIHsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBp
bWFnZVVSTCA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdlVVJMOworICAgICAgICAgICAgICAg
IGlmIChpbWFnZVVSTC5pc0VtcHR5KCkgfHwgIShpbWFnZVVSTC5wcm90b2NvbElzSW5IVFRQRmFt
aWx5KCkgfHwgaW1hZ2VVUkwucHJvdG9jb2xJcygiZGF0YSIpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCisgICAgICAgICAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgY29t
bWl0UHJldmlld2VkSW1hZ2VXaXRoVVJMOihOU1VSTCAqKWltYWdlVVJMXTsKKyAgICAgICAgICAg
ICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbdWlEZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29tbWl0UHJldmlld2luZ1ZpZXdD
b250cm9sbGVyOildKSB7CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19CRUdJTgorICAgICAgICAgICAgaWYgKGF1dG8gdmlld0NvbnRyb2xsZXIgPSBfY29udGV4dE1l
bnVMZWdhY3lQcmV2aWV3Q29udHJvbGxlci5nZXQoKSkKKyAgICAgICAgICAgICAgICBbdWlEZWxl
Z2F0ZSB3ZWJWaWV3Ol93ZWJWaWV3IGNvbW1pdFByZXZpZXdpbmdWaWV3Q29udHJvbGxlcjp2aWV3
Q29udHJvbGxlcl07CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19F
TkQKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChbdWlEZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNvbW1pdFByZXZpZXdl
ZFZpZXdDb250cm9sbGVyOildKSB7CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19CRUdJTgorICAgICAgICAgICAgaWYgKGF1dG8gdmlld0NvbnRyb2xsZXIgPSBfY29u
dGV4dE1lbnVMZWdhY3lQcmV2aWV3Q29udHJvbGxlci5nZXQoKSkKKyAgICAgICAgICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBjb21taXRQcmV2aWV3ZWRWaWV3Q29udHJvbGxl
cjp2aWV3Q29udHJvbGxlcl07CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51Rm9yRWxlbWVudDp3aWxsQ29tbWl0V2l0aEFuaW1hdG9y
OildKQorICAgICAgICBbdWlEZWxlZ2F0ZSB3ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51Rm9y
RWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKSB3aWxsQ29tbWl0V2l0aEFuaW1h
dG9yOmFuaW1hdG9yXTsKKyAgICBlbHNlIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNvbnRleHRNZW51Rm9yRWxlbWVudDp3aWxsQ29tbWl0V2l0
aEFuaW1hdG9yOildKSB7CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JF
R0lOCisgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51Rm9y
RWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKSB3aWxsQ29tbWl0V2l0aEFuaW1h
dG9yOmFuaW1hdG9yXTsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5E
CisgICAgfQorfQorCistICh2b2lkKWNvbnRleHRNZW51SW50ZXJhY3Rpb25EaWRFbmQ6KFVJQ29u
dGV4dE1lbnVJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uCit7CisgICAgaWYgKCFfd2ViVmlldykK
KyAgICAgICAgcmV0dXJuOworCisgICAgW3NlbGYgX3N0b3BTdXBwcmVzc2luZ1NlbGVjdGlvbkFz
c2lzdGFudEZvclJlYXNvbjpXZWJLaXQ6OkludGVyYWN0aW9uSXNIYXBwZW5pbmddOworCisgICAg
Ly8gRklYTUU6IFRoaXMgZGVsZWdhdGUgaXMgYmVpbmcgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGJ5
IFVJS2l0LiA8cmRhcjovL3Byb2JsZW0vNTE1NTAyOTE+CisgICAgLy8gVGhpcyBjb25kaXRpb25h
bCBhdm9pZHMgdGhlIFdLVUlEZWxlZ2F0ZSBiZWluZyBjYWxsZWQgdHdpY2UgdG9vLgorICAgIGlm
ICghX2NvbnRleHRNZW51RWxlbWVudEluZm8pIHsKKyAgICAgICAgYXV0byB1aURlbGVnYXRlID0g
c3RhdGljX2Nhc3Q8aWQ8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KF93ZWJWaWV3LlVJRGVsZWdhdGUp
OworICAgICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3
ZWJWaWV3OmNvbnRleHRNZW51RGlkRW5kRm9yRWxlbWVudDopXSkKKyAgICAgICAgICAgIFt1aURl
bGVnYXRlIHdlYlZpZXc6X3dlYlZpZXcgY29udGV4dE1lbnVEaWRFbmRGb3JFbGVtZW50Ol9jb250
ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpXTsKKyAgICAgICAgZWxzZSBpZiAoW3VpRGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb250ZXh0TWVudURpZEVuZEZv
ckVsZW1lbnQ6KV0pIHsKKyAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCisgICAgICAgICAgICBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBjb250ZXh0
TWVudURpZEVuZEZvckVsZW1lbnQ6X2NvbnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCldOworICAg
ICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBfY29udGV4dE1lbnVMZWdhY3lQcmV2aWV3Q29udHJvbGxlciA9IG51bGxwdHI7
CisgICAgX2NvbnRleHRNZW51TGVnYWN5TWVudSA9IG51bGxwdHI7CisgICAgX2NvbnRleHRNZW51
SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSA9IE5POworICAgIF9jb250ZXh0TWVudUVsZW1lbnRJbmZv
ID0gbnVsbHB0cjsKK30KKworQGVuZAorCisjZWxzZQorCitAaW1wbGVtZW50YXRpb24gV0tDb250
ZW50VmlldyAoV0tJbnRlcmFjdGlvblByZXZpZXcpCisKIC0gKHZvaWQpX3JlZ2lzdGVyUHJldmll
dwogewogICAgIGlmICghX3dlYlZpZXcuYWxsb3dzTGlua1ByZXZpZXcpCkBAIC03NzY2LDcgKzgz
MzIsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKnByZXZpZXdJZGVudGlmaWVyRm9yRWxlbWVudEFjdGlv
bihfV0tFbGVtZW50QWN0aW9uICphY3Rpb24pCiAKIEBlbmQKIAotI2VuZGlmIC8vIFVTRShMT05H
X1BSRVNTX0ZPUl9MSU5LX1BSRVZJRVcpCisjZW5kaWYgLy8gVVNFKFVJQ09OVEVYVE1FTlUpCiAK
ICNlbmRpZiAvLyBIQVZFKExJTktfUFJFVklFVykKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372419</attachid>
            <date>2019-06-18 19:09:42 -0700</date>
            <delta_ts>2019-06-19 02:05:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198986-20190619120940.patch</filename>
            <type>text/plain</type>
            <size>43362</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0OTM1YzQ1YzhmZmI4MzFhZjJkYjBk
MDkyNGRkMzcxZDM3NDE1M2UuLmYxMDc4MmMyNzhlODBlNzQ0Njg3OThkNDczNDA1YzFmNjI2NTJh
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDYtMTggIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBpbXBsZW1lbnRh
dGlvbiBmb3IgV0tDb250ZW50VmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk4OTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTg3NTE4OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVVNF
X1VJQ09OVEVYVE1FTlUgZm9yIGlPUyAxMysuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoK
KwogMjAxOS0wNi0xOCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBBZGQgcHJlbGltaW5hcnkgQU5HTEUgYmFja2VuZCB0byBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA1MDg0NzJlYzU5ODFiMzRkZTcwOWZhMmEzMzA2OGZiNmMwNDc2NzI3Li4xZTE2
NTMyMGVjOWRlNmFiYjQ3Y2U5NGM3OTU1MWRmNzEyZDJjZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxOS0wNi0xOCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CisKKyAgICAgICAgVUlDb250ZXh0TWVudUludGVyYWN0aW9uIGltcGxlbWVudGF0aW9uIGZv
ciBXS0NvbnRlbnRWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTg5ODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxODc1MTg5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluY2x1ZGUgKyBzb2Z0
IGxpbmsgRERDb250ZXh0TWVudUFjdGlvbgorICAgICAgICBhbmQgdGVtcG9yYXJpbHkgZGVzY3Jp
YmUgVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgKiBwYWwvc3BpL2lvcy9E
YXRhRGV0ZWN0b3JzVUlTUEkuaDoKKyAgICAgICAgKiBwYWwvc3BpL2lvcy9VSUtpdFNQSS5oOgor
CiAyMDE5LTA2LTE4ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGluayB0byB0aGUgbmV3IEFwcFNTTyBwcml2YXRlIGZyYW1ld29yawpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1
Yjc1NjliOTRlNDVmZGE3MTc4MGZiMGYyMTJlMDFlNzUwMGQxNGM1Li45NGQ5OTQ3NmZmM2M0YWNl
MzNhNDUwMTc2OTNiYjQ4YWRkNzUwMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE5
LTA2LTE4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBVSUNvbnRl
eHRNZW51SW50ZXJhY3Rpb24gaW1wbGVtZW50YXRpb24gZm9yIFdLQ29udGVudFZpZXcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODk4NgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTE4NzUxODk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBh
bmQgaXRzIGRlbGVnYXRlIGFzIGEKKyAgICAgICAgcmVwbGFjZW1lbnQgZm9yIFVJUHJldmlld0l0
ZW1Db250cm9sbGVyIGluIGlPUyAxMy4KKworICAgICAgICBJbiBvcmRlciB0byBwcmVzZXJ2ZSBl
eGlzdGluZyBiZWhhdmlvdXIgYXMgbXVjaCBhcyBwb3NzaWJsZSwKKyAgICAgICAgd2UgY2hlY2sg
Zm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBuZXcgV2ViS2l0IEFQSSB0byBjb25maWd1cmUKKyAg
ICAgICAgdGhlIG1lbnUuIElmIHRoYXQgaXMgbm90IHByZXNlbnQsIHdlIGF0dGVtcHQgdG8gY29u
dmVydAorICAgICAgICB0aGUgcmVzdWx0cyBvZiB0aGUgZXhpc3RpbmcgV2ViS2l0IFdLUHJldmll
d0FjdGlvbiBkZWxlZ2F0ZXMKKyAgICAgICAgaW50byBzb21ldGhpbmcgdGhhdCB3b3JrcyB3aXRo
IFVJQ29udGV4dE1lbnVzLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXR1cEludGVyYWN0aW9uXSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNlSXRlbTpd
KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVnaXN0ZXJQcmV2aWV3XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX3VucmVnaXN0ZXJQcmV2aWV3XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgX3Nob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZDpdKToKKyAgICAgICAg
KG5lZWRzRGVwcmVjYXRlZFByZXZpZXdBUEkpOgorICAgICAgICAodWlBY3Rpb25Gb3JQcmV2aWV3
QWN0aW9uKToKKyAgICAgICAgKG1lbnVGcm9tUHJldmlld09yRGVmYXVsdHMpOgorICAgICAgICAo
dGl0bGVGb3JNZW51KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBhc3NpZ25MZWdhY3lEYXRh
Rm9yQ29udGV4dE1lbnVJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNv
bnRleHRNZW51SW50ZXJhY3Rpb246Y29uZmlndXJhdGlvbkZvck1lbnVBdExvY2F0aW9uOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9jb250ZXh0TWVudUludGVyYWN0aW9uOmNvbmZpZ3Vy
YXRpb25Gb3JNZW51QXRMb2NhdGlvbjpjb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IGNvbnRpbnVlQ29udGV4dE1lbnVJbnRlcmFjdGlvbjpdKToKKyAgICAgICAgKHVpSW1h
Z2VGb3JJbWFnZSk6CisgICAgICAgIChjcmVhdGVUYXJnZXRlZFByZXZpZXcpOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IF90YXJnZXRlZFByZXZpZXddKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBjb250ZXh0TWVudUludGVyYWN0aW9uOnByZXZpZXdGb3JIaWdobGlnaHRpbmdNZW51V2l0
aENvbmZpZ3VyYXRpb246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY29udGV4dE1lbnVJ
bnRlcmFjdGlvbldpbGxQcmVzZW50Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNvbnRl
eHRNZW51SW50ZXJhY3Rpb246cHJldmlld0ZvckRpc21pc3NpbmdNZW51V2l0aENvbmZpZ3VyYXRp
b246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY29udGV4dE1lbnVJbnRlcmFjdGlvbjp3
aWxsQ29tbWl0V2l0aEFuaW1hdG9yOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNvbnRl
eHRNZW51SW50ZXJhY3Rpb25EaWRFbmQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2hv
dWxkVXNlUHJldmlld0ZvckxvbmdQcmVzc10pOiBEZWxldGVkLgorCiAyMDE5LTA2LTE4ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBkYXRl
IFdlYktpdCBBUEkgdG8gc2VwYXJhdGVseSByZXRyaWV2ZSBhY3Rpb25zIGFuZCB1c2UgY29udGV4
dCBtZW51cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggOGE1NmM2Y2YwNTMxNjgzZDkwZmMyMzk1ZTMyZWU4ZDk1
NTgyNDNlMi4uODk3MzJhMDg2ZGJmODEyNGMxMzYyZWYyZjQ4YWVjZTgxM2VlMzgzZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCkBAIC0xNTg1LDMgKzE1ODUsNyBAQAogI2lmIChQTEFURk9STShJT1MpICYmIF9fSVBI
T05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMCB8fCBQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNTAwKQogI2RlZmluZSBIQVZF
X0FQUF9TU08gMQogI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMAorI2RlZmluZSBVU0VfVUlDT05URVhUTUVOVSAx
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9EYXRh
RGV0ZWN0b3JzVUlTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lvcy9EYXRhRGV0
ZWN0b3JzVUlTUEkuaAppbmRleCAwOWZjNTlmMjAzMTk5YjE0NWJiNTU3MWRlYzc3ZmI4YzA5Mjdi
OGU0Li44MmJhNTAzODVmYjBmNzMzN2RkYTlhMDI4YjJiNDZiYWE3NjYwMWFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvRGF0YURldGVjdG9yc1VJU1BJLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL0RhdGFEZXRlY3RvcnNVSVNQSS5oCkBA
IC0zMSw2ICszMSw5IEBACiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAogI2ltcG9ydCA8
RGF0YURldGVjdG9yc1VJL0REQWN0aW9uLmg+CisjaWYgSEFWRShMSU5LX1BSRVZJRVcpICYmIFVT
RShVSUNPTlRFWFRNRU5VKQorI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0REQ29udGV4dE1lbnVB
Y3Rpb24uaD4KKyNlbmRpZgogI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0RERGV0ZWN0aW9uQ29u
dHJvbGxlci5oPgogCiAjZWxzZQpAQCAtNDYsNiArNDksMTMgQEAKIEBwcm9wZXJ0eSAocmVhZG9u
bHkpIE5TU3RyaW5nICphY3Rpb25VVEk7CiBAZW5kCiAKKyNpZiBIQVZFKExJTktfUFJFVklFVykg
JiYgVVNFKFVJQ09OVEVYVE1FTlUpCitAY2xhc3MgVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb247
CitAaW50ZXJmYWNlIEREQ29udGV4dE1lbnVBY3Rpb24KKysgKFVJQ29udGV4dE1lbnVDb25maWd1
cmF0aW9uICopY29udGV4dE1lbnVDb25maWd1cmF0aW9uV2l0aFVSTDooTlNVUkwgKilVUkwgaW5W
aWV3OihVSVZpZXcgKil2aWV3IGNvbnRleHQ6KE5TRGljdGlvbmFyeSAqKWNvbnRleHQgbWVudUlk
ZW50aWZpZXI6KE5TU3RyaW5nICopbWVudUlkZW50aWZpZXI7CitAZW5kCisjZW5kaWYKKwogQHBy
b3RvY29sIERERGV0ZWN0aW9uQ29udHJvbGxlckludGVyYWN0aW9uRGVsZWdhdGUgPE5TT2JqZWN0
PgogQGVuZAogCkBAIC03MCw2ICs4MCw5IEBACiBAZW5kCiAKIFNPRlRfTElOS19QUklWQVRFX0ZS
QU1FV09SSyhEYXRhRGV0ZWN0b3JzVUkpCisjaWYgSEFWRShMSU5LX1BSRVZJRVcpICYmIFVTRShV
SUNPTlRFWFRNRU5VKQorU09GVF9MSU5LX0NMQVNTKERhdGFEZXRlY3RvcnNVSSwgRERDb250ZXh0
TWVudUFjdGlvbik7CisjZW5kaWYKIFNPRlRfTElOS19DTEFTUyhEYXRhRGV0ZWN0b3JzVUksIERE
RGV0ZWN0aW9uQ29udHJvbGxlcikKIFNPRlRfTElOS19DT05TVEFOVChEYXRhRGV0ZWN0b3JzVUks
IGtEYXRhRGV0ZWN0b3JzTGVhZGluZ1RleHQsIGNvbnN0IE5TU3RyaW5nICopCiBTT0ZUX0xJTktf
Q09OU1RBTlQoRGF0YURldGVjdG9yc1VJLCBrRGF0YURldGVjdG9yc1RyYWlsaW5nVGV4dCwgY29u
c3QgTlNTdHJpbmcgKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2lv
cy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmgK
aW5kZXggOWI1ZTVhM2NkZTc0OWViYTA5YTY1NDNjMTU1NWQ3MTgxOTFhYWJkZS4uNTgwZDk4YmNj
MDM2NzlmYzVhMDMwOGY3OTNkMjQzMDZmOTgyNzMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTE1MSw3ICsxNTEsNyBAQCBOU19BU1NVTUVfTk9OTlVM
TF9FTkQKICNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiAjaWYgRU5BQkxFKEZV
TExfS0VZQk9BUkRfQUNDRVNTKQotQGludGVyZmFjZSBVSUNvbG9yIChJUEkpCitAaW50ZXJmYWNl
IFVJQ29sb3IgKCkKICsgKFVJQ29sb3IgKilrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3I7CiBA
ZW5kCiAKQEAgLTE2Myw5ICsxNjMsMjIgQEAgTlNfQVNTVU1FX05PTk5VTExfRU5ECiAjZW5kaWYK
IAogI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi1AaW50ZXJmYWNlIFVJQ29sb3IgKFVJ
Q29sb3JJbnRlcm5hbCkKK0BpbnRlcmZhY2UgVUlDb2xvciAoKQogKyAoVUlDb2xvciAqKXRhYmxl
Q2VsbERlZmF1bHRTZWxlY3Rpb25UaW50Q29sb3I7CiBAZW5kCiAjZW5kaWYKIAorI2lmIEhBVkUo
TElOS19QUkVWSUVXKSAmJiBVU0UoVUlDT05URVhUTUVOVSkKK0BpbnRlcmZhY2UgVUlDb250ZXh0
TWVudUNvbmZpZ3VyYXRpb24gKE5lZWRlZFVudGlsNTEyODg0MzVGaXhlZCkKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBpZCA8TlNDb3B5aW5nPiBpZGVudGlmaWVyOworQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHkpIFVJQ29udGV4dE1lbnVDb250ZW50UHJldmlld1Byb3ZpZGVyIHByZXZp
ZXdQcm92aWRlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBVSUNvbnRleHRNZW51QWN0
aW9uUHJvdmlkZXIgYWN0aW9uUHJvdmlkZXI7CitAZW5kCisKK0BpbnRlcmZhY2UgVUlQcmV2aWV3
QWN0aW9uICgpCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBVSUltYWdlICppbWFnZTsK
K0BlbmQKKworI2VuZGlmCisKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5oCmluZGV4IDNlNTcwMTdjYWFmMGRkYTc3YmQxMjkwOWRlM2E3MWM1ZjVlN2IxOTEuLjMwYzBh
ZGIyMWFiN2NiMWRkN2Q5MjgyNDQ4MTNlNjJhMzA4YzQzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKQEAgLTU5
LDEwICs1OSw2IEBACiAjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgX19oYXNf
aW5jbHVkZSg8V2ViS2l0QWRkaXRpb25zL1dLSW50ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+
KQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dLSW50ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25z
Lmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBPcGVuUGFuZWxQYXJhbWV0ZXJz
OwogfQpAQCAtMTAxLDYgKzk3LDcgQEAgc3RydWN0IFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dDsK
IEBjbGFzcyBVSUhvdmVyR2VzdHVyZVJlY29nbml6ZXI7CiBAY2xhc3MgV2ViRXZlbnQ7CiBAY2xh
c3MgV0tBY3Rpb25TaGVldEFzc2lzdGFudDsKK0BjbGFzcyBXS0NvbnRleHRNZW51RWxlbWVudElu
Zm87CiBAY2xhc3MgV0tEcmF3aW5nQ29vcmRpbmF0b3I7CiBAY2xhc3MgV0tGb2N1c2VkRm9ybUNv
bnRyb2xWaWV3OwogQGNsYXNzIFdLRm9ybUlucHV0Q29udHJvbDsKQEAgLTI0NSw4ICsyNDIsMTMg
QEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKICAgICBSZXRhaW5QdHI8VUlHZXN0dXJl
UmVjb2duaXplcj4gX3ByZXZpZXdTZWNvbmRhcnlHZXN0dXJlUmVjb2duaXplcjsKICAgICBWZWN0
b3I8Ym9vbD4gX2ZvY3VzU3RhdGVTdGFjazsKICNpZiBIQVZFKExJTktfUFJFVklFVykKLSNpZiBV
U0UoTE9OR19QUkVTU19GT1JfTElOS19QUkVWSUVXKQotICAgIExPTkdfUFJFU1NfTElOS19QUkVW
SUVXX01FTUJFUlMKKyNpZiBVU0UoVUlDT05URVhUTUVOVSkKKyAgICBSZXRhaW5QdHI8VUlDb250
ZXh0TWVudUludGVyYWN0aW9uPiBfY29udGV4dE1lbnVJbnRlcmFjdGlvbjsKKyAgICBSZXRhaW5Q
dHI8V0tDb250ZXh0TWVudUVsZW1lbnRJbmZvPiBfY29udGV4dE1lbnVFbGVtZW50SW5mbzsKKyAg
ICBCT09MIF9zaG93TGlua1ByZXZpZXdzOworICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9sbGVy
PiBfY29udGV4dE1lbnVMZWdhY3lQcmV2aWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8VUlN
ZW51PiBfY29udGV4dE1lbnVMZWdhY3lNZW51OworICAgIEJPT0wgX2NvbnRleHRNZW51SGFzUmVx
dWVzdGVkTGVnYWN5RGF0YTsKICNlbHNlCiAgICAgUmV0YWluUHRyPFVJUHJldmlld0l0ZW1Db250
cm9sbGVyPiBfcHJldmlld0l0ZW1Db250cm9sbGVyOwogI2VuZGlmCkBAIC01MzIsMTcgKzUzNCwx
MyBAQCBGT1JfRUFDSF9QUklWQVRFX1dLQ09OVEVOVFZJRVdfQUNUSU9OKERFQ0xBUkVfV0tDT05U
RU5UVklFV19BQ1RJT05fRk9SX1dFQl9WSUVXKQogQGVuZAogCiAjaWYgSEFWRShMSU5LX1BSRVZJ
RVcpCi0jaWYgVVNFKExPTkdfUFJFU1NfRk9SX0xJTktfUFJFVklFVykKLUBpbnRlcmZhY2UgV0tD
b250ZW50VmlldyAoV0tJbnRlcmFjdGlvblByZXZpZXcpIDxMT05HX1BSRVNTX0xJTktfUFJFVklF
V19QUk9UT0NPTD4KKyNpZiBVU0UoVUlDT05URVhUTUVOVSkKK0BpbnRlcmZhY2UgV0tDb250ZW50
VmlldyAoV0tJbnRlcmFjdGlvblByZXZpZXcpIDxVSUNvbnRleHRNZW51SW50ZXJhY3Rpb25EZWxl
Z2F0ZT4KICNlbHNlCiBAaW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb25QcmV2
aWV3KSA8VUlQcmV2aWV3SXRlbURlbGVnYXRlPgogI2VuZGlmCi0KLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgQk9PTCBzaG91bGRVc2VQcmV2aWV3Rm9yTG9uZ1ByZXNzOwotCiAtICh2
b2lkKV9yZWdpc3RlclByZXZpZXc7CiAtICh2b2lkKV91bnJlZ2lzdGVyUHJldmlldzsKLQogQGVu
ZAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDVjYWNlMDRiZTZlMDg5MWU5YWVjNjkxNGZh
MDA2MzM5MzUzYWFmZGYuLjhmY2U4NGMzNTgzNDI2ZTg5MTMzMTBhNTY3NWM3NjZkMTk2YzNhNWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbQpAQCAtMjksNiArMjksNyBAQAogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAKICNpbXBvcnQgIkFQSVVJQ2xpZW50LmgiCisjaW1wb3J0ICJDb21wbGV0aW9uSGFuZGxl
ckNhbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJEb2N1bWVudEVkaXRpbmdDb250ZXh0LmgiCiAjaW1w
b3J0ICJFZGl0YWJsZUltYWdlQ29udHJvbGxlci5oIgogI2ltcG9ydCAiSW5wdXRWaWV3VXBkYXRl
RGVmZXJyZXIuaCIKQEAgLTEwNSw2ICsxMDYsOSBAQAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9E
YXRhRGV0ZWN0b3JzQ29yZVNQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9pb3MvRGF0YURldGVjdG9y
c1VJU1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+Cisj
aW1wb3J0IDxwYWwvc3BpL2lvcy9VSUtpdFNQSS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4
Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL09wdGlv
bmFsLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvU2V0Rm9yU2Nv
cGUuaD4KQEAgLTE1MSw4ICsxNTUsOSBAQCBTT0ZUX0xJTktfQ0xBU1MoTWFuYWdlZENvbmZpZ3Vy
YXRpb24sIE1DUHJvZmlsZUNvbm5lY3Rpb24pOwogU09GVF9MSU5LX0NPTlNUQU5UKE1hbmFnZWRD
b25maWd1cmF0aW9uLCBNQ0ZlYXR1cmVEZWZpbml0aW9uTG9va3VwQWxsb3dlZCwgTlNTdHJpbmcg
KikKICNlbmRpZgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgX19oYXNfaW5jbHVk
ZSg8V2ViS2l0QWRkaXRpb25zL1dLSW50ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+KQotI2lt
cG9ydCA8V2ViS2l0QWRkaXRpb25zL1dLSW50ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+Cisj
aWYgSEFWRShMSU5LX1BSRVZJRVcpICYmIFVTRShVSUNPTlRFWFRNRU5VKQorc3RhdGljIE5TU3Ry
aW5nICogY29uc3Qgd2Via2l0U2hvd0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VLZXkgPSBAIldlYktp
dFNob3dMaW5rUHJldmlld3MiOworc3RhdGljIE5TU3RyaW5nICogY29uc3Qgd2Via2l0U2hvd0xp
bmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFuZ2VkTm90aWZpY2F0aW9uID0gQCJXZWJLaXRTaG93TGlu
a1ByZXZpZXdzUHJlZmVyZW5jZUNoYW5nZWQiOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXQVRD
SE9TKQpAQCAtNzY0LDE0ICs3NjksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGhhc0ZvY3VzZWRF
bGVtZW50KFdlYktpdDo6Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbiBmb2N1c2VkRWwKICAgICBb
X2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGF5OmhpZ2hsaWdodERl
bGF5XTsKICAgICBbX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGVn
YXRlOnNlbGZdOwogCi0jaWYgSEFWRShMSU5LX1BSRVZJRVcpCi0gICAgaWYgKCFzZWxmLnNob3Vs
ZFVzZVByZXZpZXdGb3JMb25nUHJlc3MpCisjaWYgSEFWRShMSU5LX1BSRVZJRVcpICYmICFVU0Uo
VUlDT05URVhUTUVOVSkKKyAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaGlnaGxpZ2h0
TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIFtzZWxmIF9jcmVhdGVBbmRD
b25maWd1cmVMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcl07CiAjZW5kaWYKLSAgICB7Ci0gICAg
ICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJl
UmVjb2duaXplci5nZXQoKV07Ci0KLSAgICAgICAgW3NlbGYgX2NyZWF0ZUFuZENvbmZpZ3VyZUxv
bmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyXTsKLSAgICB9CiAKICNpZiBFTkFCTEUoREFUQV9JTlRF
UkFDVElPTikKICAgICBbc2VsZiBzZXR1cERyYWdBbmREcm9wSW50ZXJhY3Rpb25zXTsKQEAgLTcz
NjcsNyArNzM2OCw3IEBAIHN0YXRpYyBXZWJFdmVudEZsYWdzIHdlYkV2ZW50RmxhZ3NGb3JVSUtl
eU1vZGlmaWVyRmxhZ3MoVUlLZXlNb2RpZmllckZsYWdzIGZsYWdzCiAKICNpZiBIQVZFKExJTktf
UFJFVklFVykKICAgICBpZiAoW3VzZXJJbnRlcmZhY2VJdGVtIGlzRXF1YWxUb1N0cmluZzpAImxp
bmtQcmV2aWV3UG9wb3ZlckNvbnRlbnRzIl0pIHsKLSNpZiBVU0UoTE9OR19QUkVTU19GT1JfTElO
S19QUkVWSUVXKQorI2lmIFVTRShVSUNPTlRFWFRNRU5VKQogICAgICAgICByZXR1cm4gQHsgdXNl
ckludGVyZmFjZUl0ZW06IEB7IEAicGFnZVVSTCI6IFdURjo6dXNlclZpc2libGVTdHJpbmcoX3Bv
c2l0aW9uSW5mb3JtYXRpb24udXJsKSB9IH07CiAjZWxzZQogICAgICAgICBOU1N0cmluZyAqdXJs
ID0gW19wcmV2aWV3SXRlbUNvbnRyb2xsZXIgcHJldmlld0RhdGFdW1VJUHJldmlld0RhdGFMaW5r
XTsKQEAgLTc0MTEsMTcgKzc0MTIsNTg4IEBAIHN0YXRpYyBOU1N0cmluZyAqcHJldmlld0lkZW50
aWZpZXJGb3JFbGVtZW50QWN0aW9uKF9XS0VsZW1lbnRBY3Rpb24gKmFjdGlvbikKICAgICByZXR1
cm4gbmlsOwogfQogCi0jaWYgVVNFKExPTkdfUFJFU1NfRk9SX0xJTktfUFJFVklFVykKLSNpbmNs
dWRlIDxXZWJLaXRBZGRpdGlvbnMvV0tJbnRlcmFjdGlvblByZXZpZXdBZGRpdGlvbnMubW0+Ci0j
ZWxzZQorI2lmIFVTRShVSUNPTlRFWFRNRU5VKQogCiBAaW1wbGVtZW50YXRpb24gV0tDb250ZW50
VmlldyAoV0tJbnRlcmFjdGlvblByZXZpZXcpCiAKLS0gKEJPT0wpc2hvdWxkVXNlUHJldmlld0Zv
ckxvbmdQcmVzcworLSAodm9pZClfcmVnaXN0ZXJQcmV2aWV3CiB7Ci0gICAgcmV0dXJuIE5POwor
ICAgIGlmICghX3dlYlZpZXcuYWxsb3dzTGlua1ByZXZpZXcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIF9jb250ZXh0TWVudUludGVyYWN0aW9uID0gYWRvcHROUyhbW1VJQ29udGV4dE1lbnVJbnRl
cmFjdGlvbiBhbGxvY10gaW5pdFdpdGhEZWxlZ2F0ZTpzZWxmXSk7CisgICAgX2NvbnRleHRNZW51
SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSA9IE5POworICAgIFtzZWxmIGFkZEludGVyYWN0aW9uOl9j
b250ZXh0TWVudUludGVyYWN0aW9uLmdldCgpXTsKKworICAgIFtzZWxmIF9zaG93TGlua1ByZXZp
ZXdzUHJlZmVyZW5jZUNoYW5nZWQ6bmlsXTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3Nob3dM
aW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZDopIG5hbWU6d2Via2l0U2hvd0xpbmtQcmV2aWV3
c1ByZWZlcmVuY2VDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworfQorCistICh2b2lk
KV91bnJlZ2lzdGVyUHJldmlldworeworICAgIGlmICghX2NvbnRleHRNZW51SW50ZXJhY3Rpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIFtzZWxmIHJlbW92ZUludGVyYWN0aW9uOl9jb250ZXh0
TWVudUludGVyYWN0aW9uLmdldCgpXTsKKyAgICBfY29udGV4dE1lbnVJbnRlcmFjdGlvbiA9IG5p
bDsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2Jz
ZXJ2ZXI6c2VsZiBuYW1lOndlYmtpdFNob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZE5v
dGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKK30KKworLSAodm9pZClfc2hvd0xpbmtQcmV2aWV3c1By
ZWZlcmVuY2VDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIEJv
b2xlYW4ga2V5RXhpc3RzQW5kSGFzVmFsaWRGb3JtYXQgPSBmYWxzZTsKKyAgICBCb29sZWFuIHBy
ZWZWYWx1ZSA9IENGUHJlZmVyZW5jZXNHZXRBcHBCb29sZWFuVmFsdWUoKF9fYnJpZGdlIENGU3Ry
aW5nUmVmKXdlYmtpdFNob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlS2V5LCBrQ0ZQcmVmZXJlbmNl
c0N1cnJlbnRBcHBsaWNhdGlvbiwgJmtleUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0KTsKKyAgICBp
ZiAoa2V5RXhpc3RzQW5kSGFzVmFsaWRGb3JtYXQpCisgICAgICAgIF9zaG93TGlua1ByZXZpZXdz
ID0gcHJlZlZhbHVlOworICAgIGVsc2UKKyAgICAgICAgX3Nob3dMaW5rUHJldmlld3MgPSBZRVM7
Cit9CisKK3N0YXRpYyBib29sIG5lZWRzRGVwcmVjYXRlZFByZXZpZXdBUEkoaWQ8V0tVSURlbGVn
YXRlPiBkZWxlZ2F0ZSkKK3sKKyAgICAvLyBGSVhNRTogUmVwbGFjZSB0aGVzZSB3aXRoIGJvb2xl
YW5zIGluIFVJRGVsZWdhdGUuaC4KKyAgICByZXR1cm4gZGVsZWdhdGUKKyAgICAmJiAhW2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVDb25m
aWd1cmF0aW9uRm9yRWxlbWVudDpjb21wbGV0aW9uSGFuZGxlcjopXQorICAgICYmICFbZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51Q29uZmln
dXJhdGlvbkZvckVsZW1lbnQ6Y29tcGxldGlvbkhhbmRsZXI6KV0KKyAgICAmJiAhW2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVGb3JFbGVt
ZW50OndpbGxDb21taXRXaXRoQW5pbWF0b3I6KV0KKyAgICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpjb250ZXh0TWVudUZvckVsZW1lbnQ6d2lsbENv
bW1pdFdpdGhBbmltYXRvcjopXQorICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfd2ViVmlldzpjb250ZXh0TWVudVdpbGxQcmVzZW50Rm9yRWxlbWVudDopXQor
ICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNv
bnRleHRNZW51V2lsbFByZXNlbnRGb3JFbGVtZW50OildCisgICAgJiYgIVtkZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNvbnRleHRNZW51RGlkRW5kRm9yRWxl
bWVudDopXQorICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3
ZWJWaWV3OmNvbnRleHRNZW51RGlkRW5kRm9yRWxlbWVudDopXQorICAgICYmIChbZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnNob3VsZFByZXZpZXdFbGVtZW50
OildCisgICAgICAgIHx8IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdl
YlZpZXc6cHJldmlld2luZ1ZpZXdDb250cm9sbGVyRm9yRWxlbWVudDpkZWZhdWx0QWN0aW9uczop
XQorICAgICAgICB8fCBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJW
aWV3OmNvbW1pdFByZXZpZXdpbmdWaWV3Q29udHJvbGxlcjopXQorICAgICAgICB8fCBbZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpwcmV2aWV3Vmlld0NvbnRy
b2xsZXJGb3JVUkw6ZGVmYXVsdEFjdGlvbnM6ZWxlbWVudEluZm86KV0KKyAgICAgICAgfHwgW2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6cHJldmlld1ZpZXdD
b250cm9sbGVyRm9yVVJMOildCisgICAgICAgIHx8IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnByZXZpZXdWaWV3Q29udHJvbGxlckZvckltYWdlOmFsdGVy
bmF0ZVVSTDpkZWZhdWx0QWN0aW9uczplbGVtZW50SW5mbzopXSk7Cit9CisKK0FMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0JFR0lOCitzdGF0aWMgTlNBcnJheTxXS1ByZXZpZXdBY3Rpb24g
Kj4gKndrUHJldmlld0FjdGlvbnNGcm9tRWxlbWVudEFjdGlvbnMoTlNBcnJheTxfV0tFbGVtZW50
QWN0aW9uICo+ICplbGVtZW50QWN0aW9ucywgX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKmVsZW1l
bnRJbmZvKQoreworICAgIE5TTXV0YWJsZUFycmF5PFdLUHJldmlld0FjdGlvbiAqPiAqcHJldmll
d0FjdGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6W2VsZW1lbnRBY3Rp
b25zIGNvdW50XV07CisgICAgZm9yIChfV0tFbGVtZW50QWN0aW9uICplbGVtZW50QWN0aW9uIGlu
IGVsZW1lbnRBY3Rpb25zKSB7CisgICAgICAgIFdLUHJldmlld0FjdGlvbiAqcHJldmlld0FjdGlv
biA9IFtXS1ByZXZpZXdBY3Rpb24gYWN0aW9uV2l0aElkZW50aWZpZXI6cHJldmlld0lkZW50aWZp
ZXJGb3JFbGVtZW50QWN0aW9uKGVsZW1lbnRBY3Rpb24pIHRpdGxlOmVsZW1lbnRBY3Rpb24udGl0
bGUgc3R5bGU6VUlQcmV2aWV3QWN0aW9uU3R5bGVEZWZhdWx0IGhhbmRsZXI6XihVSVByZXZpZXdB
Y3Rpb24gKiwgVUlWaWV3Q29udHJvbGxlciAqKSB7CisgICAgICAgICAgICBbZWxlbWVudEFjdGlv
biBydW5BY3Rpb25XaXRoRWxlbWVudEluZm86ZWxlbWVudEluZm9dOworICAgICAgICB9XTsKKyAg
ICAgICAgcHJldmlld0FjdGlvbi5pbWFnZSA9IFtfV0tFbGVtZW50QWN0aW9uIGltYWdlRm9yRWxl
bWVudEFjdGlvblR5cGU6ZWxlbWVudEFjdGlvbi50eXBlXTsKKyAgICAgICAgW3ByZXZpZXdBY3Rp
b25zIGFkZE9iamVjdDpwcmV2aWV3QWN0aW9uXTsKKyAgICB9CisgICAgcmV0dXJuIHByZXZpZXdB
Y3Rpb25zOworfQorCitzdGF0aWMgVUlBY3Rpb24gKnVpQWN0aW9uRm9yUHJldmlld0FjdGlvbihV
SVByZXZpZXdBY3Rpb24gKnByZXZpZXdBY3Rpb24sIFVJVmlld0NvbnRyb2xsZXIgKnByZXZpZXdW
aWV3Q29udHJvbGxlcikKK3sKKyAgICAvLyBVSVByZXZpZXdBY3Rpb25JdGVtLmltYWdlIGlzIFNQ
SSwgc28gbm8gZXh0ZXJuYWwgY2xpZW50cyB3aWxsIGJlIGFibGUKKyAgICAvLyB0byBwcm92aWRl
IGdseXBocyBmb3IgYWN0aW9ucyA8cmRhcjovL3Byb2JsZW0vNTAxNTE4NTU+LgorICAgIC8vIEhv
d2V2ZXIsIHRoZXkgc2hvdWxkIG1pZ3JhdGUgdG8gdGhlIG5ldyBBUEkuCisKKyAgICByZXR1cm4g
W1VJQWN0aW9uIGFjdGlvbldpdGhUaXRsZTpwcmV2aWV3QWN0aW9uLnRpdGxlIGltYWdlOnByZXZp
ZXdBY3Rpb24uaW1hZ2UgaWRlbnRpZmllcjpuaWwgaGFuZGxlcjpeKFVJQWN0aW9uICphY3Rpb24p
IHsKKyAgICAgICAgcHJldmlld0FjdGlvbi5oYW5kbGVyKHByZXZpZXdBY3Rpb24sIHByZXZpZXdW
aWV3Q29udHJvbGxlcik7CisgICAgfV07Cit9CitBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19FTkQKKworc3RhdGljIE5TQXJyYXk8VUlNZW51RWxlbWVudCAqPiAqbWVudUVsZW1lbnRzRnJv
bVByZXZpZXdPckRlZmF1bHRzKFVJVmlld0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJvbGxl
ciwgY29uc3QgUmV0YWluUHRyPE5TQXJyYXk+JiBkZWZhdWx0RWxlbWVudEFjdGlvbnMsIFJldGFp
blB0cjxfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbz4gZWxlbWVudEluZm8pCit7CisgICAgYXV0byBh
Y3Rpb25zID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmRlZmF1bHRFbGVtZW50
QWN0aW9ucy5nZXQoKS5jb3VudF07CisKKyAgICAvLyBPbmUgb2YgdGhlIGRlbGVnYXRlcyBtYXkg
aGF2ZSBwcm92aWRlZCBhIFVJVmlld0NvbnRyb2xsZXIgd2l0aCBhIHByZXZpZXdBY3Rpb25JdGVt
cyBhcnJheS4gSWYgc28sCisgICAgLy8gd2UgbmVlZCB0byBjb252ZXJ0IGVhY2ggVUlQcmV2aWV3
QWN0aW9uSXRlbSBpbnRvIGEgVUlBY3Rpb24uCisgICAgaWYgKHByZXZpZXdWaWV3Q29udHJvbGxl
cikgeworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAg
ICBOU0FycmF5PGlkPFVJUHJldmlld0FjdGlvbkl0ZW0+PiAqcHJldmlld0FjdGlvbnMgPSBwcmV2
aWV3Vmlld0NvbnRyb2xsZXIucHJldmlld0FjdGlvbkl0ZW1zOworICAgICAgICBmb3IgKFVJUHJl
dmlld0FjdGlvbiAqcHJldmlld0FjdGlvbiBpbiBwcmV2aWV3QWN0aW9ucykKKyAgICAgICAgICAg
IFthY3Rpb25zIGFkZE9iamVjdDp1aUFjdGlvbkZvclByZXZpZXdBY3Rpb24ocHJldmlld0FjdGlv
biwgcHJldmlld1ZpZXdDb250cm9sbGVyKV07CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0VORAorICAgIH0KKworICAgIGlmICghW2FjdGlvbnMgY291bnRdKSB7CisgICAg
ICAgIC8vIFdlIGVpdGhlciBkaWRuJ3QgZ2V0IGEgY3VzdG9tIHByZXZpZXcgVUlWaWV3Q29udHJv
bGxlciwgb3IgaXQgZGlkbid0IHByb3ZpZGUgYW55IGFjdGlvbnMKKyAgICAgICAgLy8gc28gd2Ug
c2hvdWxkIHVzZSB0aGUgZGVmYXVsdCBzZXQuCisgICAgICAgIGZvciAoX1dLRWxlbWVudEFjdGlv
biAqZWxlbWVudEFjdGlvbiBpbiBkZWZhdWx0RWxlbWVudEFjdGlvbnMuZ2V0KCkpIHsKKyAgICAg
ICAgICAgIFVJSW1hZ2UgKmltYWdlID0gW19XS0VsZW1lbnRBY3Rpb24gaW1hZ2VGb3JFbGVtZW50
QWN0aW9uVHlwZTplbGVtZW50QWN0aW9uLnR5cGVdOworCisgICAgICAgICAgICBbYWN0aW9ucyBh
ZGRPYmplY3Q6W1VJQWN0aW9uIGFjdGlvbldpdGhUaXRsZTplbGVtZW50QWN0aW9uLnRpdGxlIGlt
YWdlOmltYWdlIGlkZW50aWZpZXI6bmlsIGhhbmRsZXI6XihVSUFjdGlvbiAqKSB7CisgICAgICAg
ICAgICAgICAgW2VsZW1lbnRBY3Rpb24gcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOmVsZW1lbnRJ
bmZvLmdldCgpXTsKKyAgICAgICAgICAgIH1dXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBhY3Rpb25zOworfQorCitzdGF0aWMgVUlNZW51ICptZW51RnJvbVByZXZpZXdPckRlZmF1
bHRzKFVJVmlld0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJvbGxlciwgY29uc3QgUmV0YWlu
UHRyPE5TQXJyYXk+JiBkZWZhdWx0RWxlbWVudEFjdGlvbnMsIFJldGFpblB0cjxfV0tBY3RpdmF0
ZWRFbGVtZW50SW5mbz4gZWxlbWVudEluZm8sIE5TU3RyaW5nICp0aXRsZSkKK3sKKyAgICBhdXRv
IGFjdGlvbnMgPSBtZW51RWxlbWVudHNGcm9tUHJldmlld09yRGVmYXVsdHMocHJldmlld1ZpZXdD
b250cm9sbGVyLCBkZWZhdWx0RWxlbWVudEFjdGlvbnMsIGVsZW1lbnRJbmZvKTsKKyAgICByZXR1
cm4gW1VJTWVudSBtZW51V2l0aFRpdGxlOnRpdGxlIGNoaWxkcmVuOmFjdGlvbnNdOworfQorCitz
dGF0aWMgTlNTdHJpbmcgKnRpdGxlRm9yTWVudShib29sIGlzTGluaywgYm9vbCBzaG93TGlua1By
ZXZpZXdzLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBpZiAo
aXNMaW5rICYmICFzaG93TGlua1ByZXZpZXdzKSB7CisgICAgICAgIGlmICghdXJsLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgaWYgKFdURjo6cHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklOR19LRVkoIkphdmFTY3JpcHQiLCAiSmF2
YVNjcmlwdCBBY3Rpb24gU2hlZXQgVGl0bGUiLCAiVGl0bGUgZm9yIGFjdGlvbiBzaGVldCBmb3Ig
SmF2YVNjcmlwdCBsaW5rIik7CisgICAgICAgICAgICByZXR1cm4gV1RGOjp1c2VyVmlzaWJsZVN0
cmluZyh1cmwpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghaXNMaW5rICYmICF0aXRsZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0aXRsZTsKKworICAgIHJldHVybiBuaWw7Cit9CisK
Ky0gKHZvaWQpYXNzaWduTGVnYWN5RGF0YUZvckNvbnRleHRNZW51SW50ZXJhY3Rpb24KK3sKKyAg
ICBBU1NFUlQoIV9jb250ZXh0TWVudUhhc1JlcXVlc3RlZExlZ2FjeURhdGEpOworICAgIGlmIChf
Y29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRhKQorICAgICAgICByZXR1cm47CisgICAg
X2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSA9IFlFUzsKKworICAgIGlmICghX3dl
YlZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHVpRGVsZWdhdGUgPSBzdGF0aWNfY2Fz
dDxpZDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oX3dlYlZpZXcuVUlEZWxlZ2F0ZSk7CisgICAgaWYg
KCF1aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBhdXRvJiB1cmwgPSBf
cG9zaXRpb25JbmZvcm1hdGlvbi51cmw7CisKKyAgICBfcGFnZS0+c3RhcnRJbnRlcmFjdGlvbldp
dGhFbGVtZW50QXRQb3NpdGlvbihfcG9zaXRpb25JbmZvcm1hdGlvbi5yZXF1ZXN0LnBvaW50KTsK
KworICAgIFVJVmlld0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJvbGxlciA9IG5pbDsKKwor
ICAgIGF1dG8gZWxlbWVudEluZm8gPSBhZG9wdE5TKFtbX1dLQWN0aXZhdGVkRWxlbWVudEluZm8g
YWxsb2NdIF9pbml0V2l0aEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOl9wb3NpdGlv
bkluZm9ybWF0aW9uXSk7CisKKyAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rKSB7
CisgICAgICAgIF9sb25nUHJlc3NDYW5DbGljayA9IE5POworCisgICAgICAgIFJldGFpblB0cjxO
U0FycmF5PF9XS0VsZW1lbnRBY3Rpb24gKj4+IGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudCA9
IFtfYWN0aW9uU2hlZXRBc3Npc3RhbnQgZGVmYXVsdEFjdGlvbnNGb3JMaW5rU2hlZXQ6ZWxlbWVu
dEluZm8uZ2V0KCldOworCisgICAgICAgIC8vIEZJWE1FOiBBbmltYXRlZCBpbWFnZXMgZ28gaGVy
ZS4KKworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAg
ICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnBy
ZXZpZXdpbmdWaWV3Q29udHJvbGxlckZvckVsZW1lbnQ6ZGVmYXVsdEFjdGlvbnM6KV0pIHsKKyAg
ICAgICAgICAgIGF1dG8gZGVmYXVsdEFjdGlvbnMgPSB3a1ByZXZpZXdBY3Rpb25zRnJvbUVsZW1l
bnRBY3Rpb25zKGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudC5nZXQoKSwgZWxlbWVudEluZm8u
Z2V0KCkpOworICAgICAgICAgICAgYXV0byBwcmV2aWV3RWxlbWVudEluZm8gPSBhZG9wdE5TKFtb
V0tQcmV2aWV3RWxlbWVudEluZm8gYWxsb2NdIF9pbml0V2l0aExpbmtVUkw6dXJsXSk7CisgICAg
ICAgICAgICBwcmV2aWV3Vmlld0NvbnRyb2xsZXIgPSBbdWlEZWxlZ2F0ZSB3ZWJWaWV3Ol93ZWJW
aWV3IHByZXZpZXdpbmdWaWV3Q29udHJvbGxlckZvckVsZW1lbnQ6cHJldmlld0VsZW1lbnRJbmZv
LmdldCgpIGRlZmF1bHRBY3Rpb25zOmRlZmF1bHRBY3Rpb25zXTsKKyAgICAgICAgfSBlbHNlIGlm
IChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnByZXZp
ZXdWaWV3Q29udHJvbGxlckZvclVSTDpkZWZhdWx0QWN0aW9uczplbGVtZW50SW5mbzopXSkKKyAg
ICAgICAgICAgIHByZXZpZXdWaWV3Q29udHJvbGxlciA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93
ZWJWaWV3IHByZXZpZXdWaWV3Q29udHJvbGxlckZvclVSTDp1cmwgZGVmYXVsdEFjdGlvbnM6ZGVm
YXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50LmdldCgpIGVsZW1lbnRJbmZvOmVsZW1lbnRJbmZvLmdl
dCgpXTsKKyAgICAgICAgZWxzZSBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2ViVmlldzpwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JVUkw6KV0pCisgICAgICAg
ICAgICBwcmV2aWV3Vmlld0NvbnRyb2xsZXIgPSBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmll
dyBwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JVUkw6dXJsXTsKKyAgICAgICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECisKKyNpZiBVU0UoREFUQV9ERVRFQ1RPUlNfRk9SX0RFRkFV
TFRfUFJFVklFVykKKyAgICAgICAgLy8gUHJldmlvdXNseSwgVUlQcmV2aWV3SXRlbUNvbnRyb2xs
ZXIgd291bGQgZGV0ZWN0IHRoZSBjYXNlIHdoZXJlIHRoZXJlIHdhcyBubyBwcmV2aWV3Vmlld0Nv
bnRyb2xsZXIKKyAgICAgICAgLy8gYW5kIGNyZWF0ZSBvbmUuIFdlIG5lZWQgdG8gcmVwbGljYXRl
IHRoaXMgY29kZSBmb3IgdGhlIG5ldyBBUEkuCisgICAgICAgIGlmICghcHJldmlld1ZpZXdDb250
cm9sbGVyKSB7CisgICAgICAgICAgICBhdXRvIGRkQ29udGV4dE1lbnVBY3Rpb25DbGFzcyA9IGdl
dEREQ29udGV4dE1lbnVBY3Rpb25DbGFzcygpOworICAgICAgICAgICAgaWYgKFtkZENvbnRleHRN
ZW51QWN0aW9uQ2xhc3MgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb250ZXh0TWVudUNv
bmZpZ3VyYXRpb25Gb3JVUkw6aWRlbnRpZmllcjpzZWxlY3RlZFRleHQ6cmVzdWx0czppblZpZXc6
Y29udGV4dDptZW51SWRlbnRpZmllcjopXSkgeworICAgICAgICAgICAgICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKyAgICAgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmNvbnRleHQg
PSBbc2VsZiBkYXRhRGV0ZWN0aW9uQ29udGV4dEZvclBvc2l0aW9uSW5mb3JtYXRpb246X3Bvc2l0
aW9uSW5mb3JtYXRpb25dOworICAgICAgICAgICAgICAgIFJldGFpblB0cjxVSUNvbnRleHRNZW51
Q29uZmlndXJhdGlvbj4gZGF0YURldGVjdG9yc1Jlc3VsdCA9IFtkZENvbnRleHRNZW51QWN0aW9u
Q2xhc3MgY29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yVVJMOnVybCBpZGVudGlmaWVyOl9wb3Np
dGlvbkluZm9ybWF0aW9uLmRhdGFEZXRlY3RvcklkZW50aWZpZXIgc2VsZWN0ZWRUZXh0OnNlbGYu
c2VsZWN0ZWRUZXh0IHJlc3VsdHM6X3Bvc2l0aW9uSW5mb3JtYXRpb24uZGF0YURldGVjdG9yUmVz
dWx0cy5nZXQoKSBpblZpZXc6c2VsZiBjb250ZXh0OmNvbnRleHQgbWVudUlkZW50aWZpZXI6bmls
XTsKKyAgICAgICAgICAgICAgICBpZiAoX3Nob3dMaW5rUHJldmlld3MgJiYgZGF0YURldGVjdG9y
c1Jlc3VsdCAmJiBkYXRhRGV0ZWN0b3JzUmVzdWx0LmdldCgpLnByZXZpZXdQcm92aWRlcikKKyAg
ICAgICAgICAgICAgICAgICAgX2NvbnRleHRNZW51TGVnYWN5UHJldmlld0NvbnRyb2xsZXIgPSBk
YXRhRGV0ZWN0b3JzUmVzdWx0LmdldCgpLnByZXZpZXdQcm92aWRlcigpOworICAgICAgICAgICAg
ICAgIGlmIChkYXRhRGV0ZWN0b3JzUmVzdWx0ICYmIGRhdGFEZXRlY3RvcnNSZXN1bHQuZ2V0KCku
YWN0aW9uUHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBtZW51RWxlbWVudHMg
PSBtZW51RWxlbWVudHNGcm9tUHJldmlld09yRGVmYXVsdHMobmlsLCBkZWZhdWx0QWN0aW9uc0Zy
b21Bc3Npc3RhbnQsIGVsZW1lbnRJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgX2NvbnRleHRN
ZW51TGVnYWN5TWVudSA9IGRhdGFEZXRlY3RvcnNSZXN1bHQuZ2V0KCkuYWN0aW9uUHJvdmlkZXIo
bWVudUVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYXV0byBtZW51VGl0bGUgPSB0aXRsZUZvck1l
bnUodHJ1ZSwgX3Nob3dMaW5rUHJldmlld3MsIHVybCwgX3Bvc2l0aW9uSW5mb3JtYXRpb24udGl0
bGUpOworICAgICAgICBfY29udGV4dE1lbnVMZWdhY3lNZW51ID0gbWVudUZyb21QcmV2aWV3T3JE
ZWZhdWx0cyhwcmV2aWV3Vmlld0NvbnRyb2xsZXIsIGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFu
dCwgZWxlbWVudEluZm8sIG1lbnVUaXRsZSk7CisKKyAgICB9IGVsc2UgaWYgKF9wb3NpdGlvbklu
Zm9ybWF0aW9uLmlzSW1hZ2UpIHsKKyAgICAgICAgTlNVUkwgKm5zVVJMID0gKE5TVVJMICopdXJs
OworICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBpbWFnZUluZm87CisgICAgICAgIEFT
U0VSVChfcG9zaXRpb25JbmZvcm1hdGlvbi5pbWFnZSk7CisgICAgICAgIGF1dG8gY2dJbWFnZSA9
IF9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdlLT5tYWtlQ0dJbWFnZUNvcHkoKTsKKyAgICAgICAg
YXV0byB1aUltYWdlID0gYWRvcHROUyhbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpj
Z0ltYWdlLmdldCgpXSk7CisKKyAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6YWx0ZXJuYXRlVVJMRnJvbUltYWdlOnVzZXJJbmZvOild
KSB7CisgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvOworICAgICAgICAgICAgbnNV
UkwgPSBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBhbHRlcm5hdGVVUkxGcm9tSW1hZ2U6
dWlJbWFnZS5nZXQoKSB1c2VySW5mbzomdXNlckluZm9dOworICAgICAgICAgICAgaW1hZ2VJbmZv
ID0gdXNlckluZm87CisgICAgICAgIH0KKworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19CRUdJTgorICAgICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfd2ViVmlldzp3aWxsUHJldmlld0ltYWdlV2l0aFVSTDopXSkKKyAgICAgICAg
ICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IHdpbGxQcmV2aWV3SW1hZ2VXaXRoVVJM
Ol9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdlVVJMXTsKKworICAgICAgICBSZXRhaW5QdHI8TlNB
cnJheTxfV0tFbGVtZW50QWN0aW9uICo+PiBkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQgPSBb
X2FjdGlvblNoZWV0QXNzaXN0YW50IGRlZmF1bHRBY3Rpb25zRm9ySW1hZ2VTaGVldDplbGVtZW50
SW5mby5nZXQoKV07CisKKyAgICAgICAgaWYgKGltYWdlSW5mbyAmJiBbdWlEZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnByZXZpZXdWaWV3Q29udHJvbGxlckZv
ckltYWdlOmFsdGVybmF0ZVVSTDpkZWZhdWx0QWN0aW9uczplbGVtZW50SW5mbzopXSkKKyAgICAg
ICAgICAgIHByZXZpZXdWaWV3Q29udHJvbGxlciA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJW
aWV3IHByZXZpZXdWaWV3Q29udHJvbGxlckZvckltYWdlOnVpSW1hZ2UuZ2V0KCkgYWx0ZXJuYXRl
VVJMOm5zVVJMIGRlZmF1bHRBY3Rpb25zOmRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudC5nZXQo
KSBlbGVtZW50SW5mbzplbGVtZW50SW5mby5nZXQoKV07CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHByZXZpZXdWaWV3Q29udHJvbGxlciA9IFtbV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxl
ciBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmNnSW1hZ2UgZGVmYXVsdEFjdGlvbnM6ZGVmYXVsdEFj
dGlvbnNGcm9tQXNzaXN0YW50LmdldCgpIGVsZW1lbnRJbmZvOmVsZW1lbnRJbmZvLmdldCgpXTsK
KyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisKKyAgICAgICAgYXV0
byBtZW51VGl0bGUgPSB0aXRsZUZvck1lbnUoZmFsc2UsIF9zaG93TGlua1ByZXZpZXdzLCB1cmws
IF9wb3NpdGlvbkluZm9ybWF0aW9uLnRpdGxlKTsKKyAgICAgICAgX2NvbnRleHRNZW51TGVnYWN5
TWVudSA9IG1lbnVGcm9tUHJldmlld09yRGVmYXVsdHMocHJldmlld1ZpZXdDb250cm9sbGVyLCBk
ZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQsIGVsZW1lbnRJbmZvLCBtZW51VGl0bGUpOworICAg
IH0KKworICAgIF9jb250ZXh0TWVudUxlZ2FjeVByZXZpZXdDb250cm9sbGVyID0gX3Nob3dMaW5r
UHJldmlld3MgPyBwcmV2aWV3Vmlld0NvbnRyb2xsZXIgOiBudWxscHRyOworfQorCistIChVSUNv
bnRleHRNZW51Q29uZmlndXJhdGlvbiAqKWNvbnRleHRNZW51SW50ZXJhY3Rpb246KFVJQ29udGV4
dE1lbnVJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIGNvbmZpZ3VyYXRpb25Gb3JNZW51QXRMb2Nh
dGlvbjooQ0dQb2ludClsb2NhdGlvbgoreworICAgIC8vIFJlcXVpcmVkIHRvIGNvbmZvcm0gdG8g
VUlDb250ZXh0TWVudUludGVyYWN0aW9uRGVsZWdhdGUsIGJ1dCBTUEkgdmVyc2lvbiBzaG91bGQg
YmUgY2FsbGVkIGluc3RlYWQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAodm9pZClfY29udGV4dE1lbnVJbnRlcmFjdGlvbjooVUlDb250ZXh0TWVu
dUludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gY29uZmlndXJhdGlvbkZvck1lbnVBdExvY2F0aW9u
OihDR1BvaW50KWxvY2F0aW9uIGNvbXBsZXRpb246KHZvaWQoXikoVUlDb250ZXh0TWVudUNvbmZp
Z3VyYXRpb24gKikpY29tcGxldGlvbgoreworICAgIGlmICghX3dlYlZpZXcpCisgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uKG5pbCk7CisKKyAgICBpZiAoIV93ZWJWaWV3LmNvbmZpZ3VyYXRpb24u
X2xvbmdQcmVzc0FjdGlvbnNFbmFibGVkKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwp
OworCisgICAgY29uc3QgYXV0byBwb3NpdGlvbiA9IFtpbnRlcmFjdGlvbiBsb2NhdGlvbkluVmll
dzpzZWxmXTsKKyAgICBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0IHJlcXVl
c3QgeyBXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQocG9zaXRpb24pIH07CisgICAgcmVxdWVzdC5p
bmNsdWRlU25hcHNob3QgPSB0cnVlOworICAgIHJlcXVlc3QuaW5jbHVkZUxpbmtJbmRpY2F0b3Ig
PSB0cnVlOworCisgICAgW3NlbGYgZG9BZnRlclBvc2l0aW9uSW5mb3JtYXRpb25VcGRhdGU6W3dl
YWtTZWxmID0gV2Vha09iakNQdHI8V0tDb250ZW50Vmlldz4oc2VsZiksIGNvbXBsZXRpb24gPSBt
YWtlQmxvY2tQdHIoY29tcGxldGlvbildIChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uKSB7CisgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOwor
ICAgICAgICBpZiAoIXN0cm9uZ1NlbGYpCisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbihu
aWwpOworICAgICAgICBbc3Ryb25nU2VsZiBjb250aW51ZUNvbnRleHRNZW51SW50ZXJhY3Rpb246
Y29tcGxldGlvbi5nZXQoKV07CisgICAgfSBmb3JSZXF1ZXN0OnJlcXVlc3RdOworfQorCistICh2
b2lkKWNvbnRpbnVlQ29udGV4dE1lbnVJbnRlcmFjdGlvbjoodm9pZCheKShVSUNvbnRleHRNZW51
Q29uZmlndXJhdGlvbiAqKSljb21wbGV0aW9uCit7CisgICAgaWYgKCFfcG9zaXRpb25JbmZvcm1h
dGlvbi50b3VjaENhbGxvdXRFbmFibGVkKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwp
OworCisgICAgaWYgKCFfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0xpbmsgJiYgIV9wb3NpdGlvbklu
Zm9ybWF0aW9uLmlzSW1hZ2UgJiYgIV9wb3NpdGlvbkluZm9ybWF0aW9uLmlzQXR0YWNobWVudCkK
KyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24obmlsKTsKKworICAgIFVSTCBsaW5rVVJMID0gX3Bv
c2l0aW9uSW5mb3JtYXRpb24udXJsOworCisgICAgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmlz
TGluayAmJiBsaW5rVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24obmls
KTsKKworICAgIGF1dG8gdWlEZWxlZ2F0ZSA9IHN0YXRpY19jYXN0PGlkPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+Pihfd2ViVmlldy5VSURlbGVnYXRlKTsKKyAgICBpZiAoIXVpRGVsZWdhdGUpCisgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisKKyAgICBpZiAobmVlZHNEZXByZWNhdGVkUHJl
dmlld0FQSSh1aURlbGVnYXRlKSkgeworCisgICAgICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlv
bi5pc0xpbmspIHsKKyAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JF
R0lOCisgICAgICAgICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcih3ZWJWaWV3OnNob3VsZFByZXZpZXdFbGVtZW50OildKSB7CisgICAgICAgICAgICAgICAg
YXV0byBwcmV2aWV3RWxlbWVudEluZm8gPSBhZG9wdE5TKFtbV0tQcmV2aWV3RWxlbWVudEluZm8g
YWxsb2NdIF9pbml0V2l0aExpbmtVUkw6bGlua1VSTF0pOworICAgICAgICAgICAgICAgIGlmICgh
W3VpRGVsZWdhdGUgd2ViVmlldzpfd2ViVmlldyBzaG91bGRQcmV2aWV3RWxlbWVudDpwcmV2aWV3
RWxlbWVudEluZm8uZ2V0KCldKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlv
bihuaWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IEphdmFTY3JpcHQg
dXJscyBoZXJlLiBCdXQgbWFrZSBzdXJlIHRoZXkgZG9uJ3Qgc2hvdyBhIHByZXZpZXcuCisgICAg
ICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTA1NzIyODM+CisgICAgICAgICAgICBpZiAoIWxp
bmtVUkwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7CisjaWYgRU5BQkxFKERBVEFfREVURUNU
SU9OKQorICAgICAgICAgICAgICAgIGlmICghV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6Y2FuQmVQ
cmVzZW50ZWRCeURhdGFEZXRlY3RvcnMobGlua1VSTCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uKG5pbCk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIF9jb250ZXh0TWVudUxlZ2FjeVByZXZpZXdDb250cm9sbGVyID0gbnVsbHB0cjsK
KyAgICAgICAgX2NvbnRleHRNZW51TGVnYWN5TWVudSA9IG51bGxwdHI7CisgICAgICAgIF9jb250
ZXh0TWVudUhhc1JlcXVlc3RlZExlZ2FjeURhdGEgPSBOTzsKKworICAgICAgICBVSUNvbnRleHRN
ZW51QWN0aW9uUHJvdmlkZXIgYWN0aW9uTWVudVByb3ZpZGVyID0gW3dlYWtTZWxmID0gV2Vha09i
akNQdHI8V0tDb250ZW50Vmlldz4oc2VsZildIChOU0FycmF5PFVJTWVudUVsZW1lbnQgKj4gKnN1
Z2dlc3RlZEFjdGlvbnMpIC0+IFVJTWVudSAqIHsKKyAgICAgICAgICAgIGF1dG8gc3Ryb25nU2Vs
ZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICAgICAgaWYgKCFzdHJvbmdTZWxmKQorICAgICAg
ICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICBpZiAoIXN0cm9uZ1NlbGYtPl9jb250
ZXh0TWVudUhhc1JlcXVlc3RlZExlZ2FjeURhdGEpCisgICAgICAgICAgICAgICAgW3N0cm9uZ1Nl
bGYgYXNzaWduTGVnYWN5RGF0YUZvckNvbnRleHRNZW51SW50ZXJhY3Rpb25dOworCisgICAgICAg
ICAgICByZXR1cm4gc3Ryb25nU2VsZi0+X2NvbnRleHRNZW51TGVnYWN5TWVudS5nZXQoKTsKKyAg
ICAgICAgfTsKKworICAgICAgICBVSUNvbnRleHRNZW51Q29udGVudFByZXZpZXdQcm92aWRlciBj
b250ZW50UHJldmlld1Byb3ZpZGVyID0gW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tDb250ZW50
Vmlldz4oc2VsZildICgpIC0+IFVJVmlld0NvbnRyb2xsZXIgKiB7CisgICAgICAgICAgICBhdXRv
IHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgICAgIGlmICghc3Ryb25nU2Vs
ZikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgaWYgKCFzdHJvbmdT
ZWxmLT5fY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRhKQorICAgICAgICAgICAgICAg
IFtzdHJvbmdTZWxmIGFzc2lnbkxlZ2FjeURhdGFGb3JDb250ZXh0TWVudUludGVyYWN0aW9uXTsK
KworICAgICAgICAgICAgcmV0dXJuIHN0cm9uZ1NlbGYtPl9jb250ZXh0TWVudUxlZ2FjeVByZXZp
ZXdDb250cm9sbGVyLmdldCgpOworICAgICAgICB9OworCisgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgcHJvdmlkZSBhbiBpZGVudGlmaWVyIGFuZCBBU1NFUlQgaW4gZGVsZWdhdGVzIGlmIHdl
IGRvbid0IG1hdGNoPworICAgICAgICByZXR1cm4gY29tcGxldGlvbihbVUlDb250ZXh0TWVudUNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbldpdGhJZGVudGlmaWVyOm5pbCBwcmV2aWV3UHJvdmlk
ZXI6Y29udGVudFByZXZpZXdQcm92aWRlciBhY3Rpb25Qcm92aWRlcjphY3Rpb25NZW51UHJvdmlk
ZXJdKTsKKyAgICB9CisKKyAgICBhdXRvIGNvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihb
Y29tcGxldGlvbiA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKSwgbGlua1VSTCA9IFdURk1vdmUo
bGlua1VSTCksIHdlYWtTZWxmID0gV2Vha09iakNQdHI8V0tDb250ZW50Vmlldz4oc2VsZildIChV
SUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbkZyb21XS1VJRGVsZWdhdGUp
IG11dGFibGUgeworCisgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOwor
ICAgICAgICBpZiAoIXN0cm9uZ1NlbGYpCisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbihu
aWwpOworCisgICAgICAgIGlmICghY29uZmlndXJhdGlvbkZyb21XS1VJRGVsZWdhdGUpIHsKKwor
ICAgICAgICAgICAgc3Ryb25nU2VsZi0+X2NvbnRleHRNZW51RWxlbWVudEluZm8gPSBuaWw7CisK
KyAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBvYmplY3Qgd2UgbWlnaHQg
d2FudCB0byBzaG93IGEgY29udGV4dCBtZW51IGZvciwgYnV0IHRoZQorICAgICAgICAgICAgLy8g
Y2xpZW50IHdhcyB1bmFibGUgdG8gaGFuZGxlIGl0LiBCZWZvcmUgZ2l2aW5nIHVwLCB3ZSBhc2sg
RGF0YURldGVjdG9ycy4KKworI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBTdXBwb3J0IEphdmFTY3JpcHQgdXJscyBoZXJlLiBCdXQgbWFrZSBzdXJlIHRo
ZXkgZG9uJ3Qgc2hvdyBhIHByZXZpZXcuCisgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0v
NTA1NzIyODM+CisgICAgICAgICAgICBpZiAoIWxpbmtVUkwucHJvdG9jb2xJc0luSFRUUEZhbWls
eSgpICYmICFXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpjYW5CZVByZXNlbnRlZEJ5RGF0YURldGVj
dG9ycyhsaW5rVVJMKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOwor
CisgICAgICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgICAgICAgICBh
dXRvIGRkQ29udGV4dE1lbnVBY3Rpb25DbGFzcyA9IGdldEREQ29udGV4dE1lbnVBY3Rpb25DbGFz
cygpOworICAgICAgICAgICAgaWYgKFtkZENvbnRleHRNZW51QWN0aW9uQ2xhc3MgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25XaXRoVVJMOmluVmll
dzpjb250ZXh0Om1lbnVJZGVudGlmaWVyOildKSB7CisgICAgICAgICAgICAgICAgTlNEaWN0aW9u
YXJ5ICpjb250ZXh0ID0gW3N0cm9uZ1NlbGYgZGF0YURldGVjdGlvbkNvbnRleHRGb3JQb3NpdGlv
bkluZm9ybWF0aW9uOnN0cm9uZ1NlbGYtPl9wb3NpdGlvbkluZm9ybWF0aW9uXTsKKyAgICAgICAg
ICAgICAgICBVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbkZyb21ERCA9
IFtkZENvbnRleHRNZW51QWN0aW9uQ2xhc3MgY29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yVVJM
OmxpbmtVUkwgaWRlbnRpZmllcjpzdHJvbmdTZWxmLT5fcG9zaXRpb25JbmZvcm1hdGlvbi5kYXRh
RGV0ZWN0b3JJZGVudGlmaWVyIHNlbGVjdGVkVGV4dDpbc3Ryb25nU2VsZiBzZWxlY3RlZFRleHRd
IHJlc3VsdHM6c3Ryb25nU2VsZi0+X3Bvc2l0aW9uSW5mb3JtYXRpb24uZGF0YURldGVjdG9yUmVz
dWx0cy5nZXQoKSBpblZpZXc6c3Ryb25nU2VsZi5nZXQoKSBjb250ZXh0OmNvbnRleHQgbWVudUlk
ZW50aWZpZXI6bmlsXTsKKyAgICAgICAgICAgICAgICBpZiAoc3Ryb25nU2VsZi0+X3Nob3dMaW5r
UHJldmlld3MpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uKGNvbmZpZ3Vy
YXRpb25Gcm9tREQpOworICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uKFtVSUNvbnRl
eHRNZW51Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uV2l0aElkZW50aWZpZXI6W2NvbmZpZ3Vy
YXRpb25Gcm9tREQgaWRlbnRpZmllcl0gcHJldmlld1Byb3ZpZGVyOltjb25maWd1cmF0aW9uRnJv
bUREIHByZXZpZXdQcm92aWRlcl0gYWN0aW9uUHJvdmlkZXI6W2NvbmZpZ3VyYXRpb25Gcm9tREQg
YWN0aW9uUHJvdmlkZXJdXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbihu
aWwpOworICAgICAgICB9CisKKyAgICAgICAgaWQ8TlNDb3B5aW5nPiBpZGVudGlmaWVyID0gW2Nv
bmZpZ3VyYXRpb25Gcm9tV0tVSURlbGVnYXRlIGlkZW50aWZpZXJdOworICAgICAgICBVSUNvbnRl
eHRNZW51Q29udGVudFByZXZpZXdQcm92aWRlciBjb250ZW50UHJldmlld1Byb3ZpZGVyID0gW2Nv
bmZpZ3VyYXRpb25Gcm9tV0tVSURlbGVnYXRlIHByZXZpZXdQcm92aWRlcl07CisgICAgICAgIFVJ
Q29udGV4dE1lbnVBY3Rpb25Qcm92aWRlciBhY3Rpb25NZW51UHJvdmlkZXIgPSBbY29uZmlndXJh
dGlvbkZyb21XS1VJRGVsZWdhdGUgYWN0aW9uUHJvdmlkZXJdOworCisgICAgICAgIGF1dG8gYWN0
aW9uUHJvdmlkZXJXcmFwcGVyID0gW2FjdGlvblByb3ZpZGVyRnJvbVVJRGVsZWdhdGUgPSBtYWtl
QmxvY2tQdHIoYWN0aW9uTWVudVByb3ZpZGVyKSwgd2Vha1NlbGYgPSBXVEZNb3ZlKHdlYWtTZWxm
KV0gKE5TQXJyYXk8VUlNZW51RWxlbWVudCAqPiAqc3VnZ2VzdGVkQWN0aW9ucykgLT4gVUlNZW51
ICogeworICAgICAgICAgICAgYXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoIXN0cm9uZ1NlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgICAgICAgICAgYXV0byBlbGVtZW50SW5mbyA9IGFkb3B0TlMoW1tfV0tBY3RpdmF0ZWRFbGVt
ZW50SW5mbyBhbGxvY10gX2luaXRXaXRoSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246
c3Ryb25nU2VsZi0+X3Bvc2l0aW9uSW5mb3JtYXRpb25dKTsKKyAgICAgICAgICAgIFJldGFpblB0
cjxOU0FycmF5PF9XS0VsZW1lbnRBY3Rpb24gKj4+IGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFu
dCA9IHN0cm9uZ1NlbGYtPl9wb3NpdGlvbkluZm9ybWF0aW9uLmlzTGluayA/IFtzdHJvbmdTZWxm
LT5fYWN0aW9uU2hlZXRBc3Npc3RhbnQgZGVmYXVsdEFjdGlvbnNGb3JMaW5rU2hlZXQ6ZWxlbWVu
dEluZm8uZ2V0KCldIDogW3N0cm9uZ1NlbGYtPl9hY3Rpb25TaGVldEFzc2lzdGFudCBkZWZhdWx0
QWN0aW9uc0ZvckltYWdlU2hlZXQ6ZWxlbWVudEluZm8uZ2V0KCldOworCisgICAgICAgICAgICBh
dXRvIG1lbnVFbGVtZW50cyA9IG1lbnVFbGVtZW50c0Zyb21QcmV2aWV3T3JEZWZhdWx0cyhuaWws
IGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudCwgZWxlbWVudEluZm8pOworCisgICAgICAgICAg
ICBpZiAoYWN0aW9uUHJvdmlkZXJGcm9tVUlEZWxlZ2F0ZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gYWN0aW9uUHJvdmlkZXJGcm9tVUlEZWxlZ2F0ZShtZW51RWxlbWVudHMpOworCisgICAgICAg
ICAgICBhdXRvIHRpdGxlID0gdGl0bGVGb3JNZW51KHN0cm9uZ1NlbGYtPl9wb3NpdGlvbkluZm9y
bWF0aW9uLmlzTGluaywgc3Ryb25nU2VsZi0+X3Nob3dMaW5rUHJldmlld3MsIHN0cm9uZ1NlbGYt
Pl9wb3NpdGlvbkluZm9ybWF0aW9uLnVybCwgc3Ryb25nU2VsZi0+X3Bvc2l0aW9uSW5mb3JtYXRp
b24udGl0bGUpOworICAgICAgICAgICAgcmV0dXJuIFtVSU1lbnUgbWVudVdpdGhUaXRsZTp0aXRs
ZSBjaGlsZHJlbjptZW51RWxlbWVudHNdOworICAgICAgICB9OworCisgICAgICAgIGNvbXBsZXRp
b24oW1VJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb25XaXRoSWRlbnRpZmll
cjppZGVudGlmaWVyIHByZXZpZXdQcm92aWRlcjpjb250ZW50UHJldmlld1Byb3ZpZGVyIGFjdGlv
blByb3ZpZGVyOmFjdGlvblByb3ZpZGVyV3JhcHBlcl0pOworICAgIH0pOworCisgICAgX2NvbnRl
eHRNZW51RWxlbWVudEluZm8gPSB3cmFwcGVyKEFQSTo6Q29udGV4dE1lbnVFbGVtZW50SW5mbzo6
Y3JlYXRlKF9wb3NpdGlvbkluZm9ybWF0aW9uKSk7CisgICAgaWYgKFt1aURlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVDb25maWd1cmF0aW9u
Rm9yRWxlbWVudDpjb21wbGV0aW9uSGFuZGxlcjopXSkgeworICAgICAgICBhdXRvIGNoZWNrZXIg
PSBXZWJLaXQ6OkNvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZSh1aURlbGVnYXRl
LCBAc2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yRWxlbWVudDpj
b21wbGV0aW9uSGFuZGxlcjopKTsKKyAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZp
ZXcgY29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yRWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50
SW5mby5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25CbG9j
ayA9IFdURk1vdmUoY29tcGxldGlvbkJsb2NrKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcild
IChVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbikgeworICAgICAgICAg
ICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9u
SGFuZGxlcigpOworICAgICAgICAgICAgY29tcGxldGlvbkJsb2NrKGNvbmZpZ3VyYXRpb24pOwor
ICAgICAgICB9KS5nZXQoKV07CisgICAgfSBlbHNlIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5p
c0xpbmsgJiYgW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3
OmNvbnRleHRNZW51Q29uZmlndXJhdGlvbkZvckVsZW1lbnQ6Y29tcGxldGlvbkhhbmRsZXI6KV0p
IHsKKyAgICAgICAgYXV0byBjaGVja2VyID0gV2ViS2l0OjpDb21wbGV0aW9uSGFuZGxlckNhbGxD
aGVja2VyOjpjcmVhdGUodWlEZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVD
b25maWd1cmF0aW9uRm9yRWxlbWVudDpjb21wbGV0aW9uSGFuZGxlcjopKTsKKyAgICAgICAgW3Vp
RGVsZWdhdGUgd2ViVmlldzpfd2ViVmlldyBjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVt
ZW50Ol9jb250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VC
bG9ja1B0cihbY29tcGxldGlvbkJsb2NrID0gV1RGTW92ZShjb21wbGV0aW9uQmxvY2spLCBjaGVj
a2VyID0gV1RGTW92ZShjaGVja2VyKV0gKFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uICpjb25m
aWd1cmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJI
YXNCZWVuQ2FsbGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2hl
Y2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICBjb21wbGV0aW9u
QmxvY2soY29uZmlndXJhdGlvbik7CisgICAgICAgIH0pLmdldCgpXTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgY29tcGxldGlvbkJsb2NrKG5pbCk7CiB9CiAKK3N0YXRpYyBSZXRhaW5QdHI8VUlJbWFn
ZT4gdWlJbWFnZUZvckltYWdlKFdlYkNvcmU6OkltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWlt
YWdlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgYXV0byBjZ0ltYWdlID0gaW1hZ2UtPm5h
dGl2ZUltYWdlKCk7CisgICAgaWYgKCFjZ0ltYWdlKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgcmV0dXJuIGFkb3B0TlMoW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6Y2dJbWFn
ZS5nZXQoKV0pOworfQorCisvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbWVyZ2VkIHdpdGggY3Jl
YXRlVGFyZ2V0ZWREcmFnUHJldmlldyBpbiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuCitzdGF0
aWMgUmV0YWluUHRyPFVJVGFyZ2V0ZWRQcmV2aWV3PiBjcmVhdGVUYXJnZXRlZFByZXZpZXcoVUlJ
bWFnZSAqaW1hZ2UsIFVJVmlldyAqcm9vdFZpZXcsIFVJVmlldyAqcHJldmlld0NvbnRhaW5lciwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlcywgY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIGNsaXBwaW5nUmVjdHNJbkZyYW1lQ29vcmRp
bmF0ZXMsIFVJQ29sb3IgKmJhY2tncm91bmRDb2xvcikKK3sKKyAgICBpZiAoZnJhbWVJblJvb3RW
aWV3Q29vcmRpbmF0ZXMuaXNFbXB0eSgpIHx8ICFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMgPSBb
cm9vdFZpZXcgY29udmVydFJlY3Q6ZnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMgdG9WaWV3OnBy
ZXZpZXdDb250YWluZXJdOworICAgIGlmIChmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHNj
YWxpbmdSYXRpbyA9IGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcy5zaXplKCkgLyBmcmFtZUlu
Um9vdFZpZXdDb29yZGluYXRlcy5zaXplKCk7CisgICAgTlNNdXRhYmxlQXJyYXkgKmNsaXBwaW5n
UmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhD
YXBhY2l0eTpjbGlwcGluZ1JlY3RzSW5GcmFtZUNvb3JkaW5hdGVzLnNpemUoKV07CisKKyAgICBm
b3IgKGF1dG8gcmVjdCA6IGNsaXBwaW5nUmVjdHNJbkZyYW1lQ29vcmRpbmF0ZXMpIHsKKyAgICAg
ICAgcmVjdC5zY2FsZShzY2FsaW5nUmF0aW8pOworICAgICAgICBbY2xpcHBpbmdSZWN0VmFsdWVz
SW5GcmFtZUNvb3JkaW5hdGVzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6cmVj
dF1dOworICAgIH0KKworICAgIFJldGFpblB0cjxVSVByZXZpZXdQYXJhbWV0ZXJzPiBwYXJhbWV0
ZXJzOworICAgIGlmIChjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMuY291bnQp
CisgICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbVUlQcmV2aWV3UGFyYW1ldGVycyBhbGxv
Y10gaW5pdFdpdGhUZXh0TGluZVJlY3RzOmNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGlu
YXRlc10pOworICAgIGVsc2UKKyAgICAgICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSVByZXZp
ZXdQYXJhbWV0ZXJzIGFsbG9jXSBpbml0XSk7CisKKyAgICBpZiAoYmFja2dyb3VuZENvbG9yKQor
ICAgICAgICBbcGFyYW1ldGVycyBzZXRCYWNrZ3JvdW5kQ29sb3I6YmFja2dyb3VuZENvbG9yXTsK
KworICAgIENHUG9pbnQgY2VudGVySW5Db250YWluZXJDb29yZGluYXRlcyA9IHsgQ0dSZWN0R2V0
TWlkWChmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMpLCBDR1JlY3RHZXRNaWRZKGZyYW1lSW5D
b250YWluZXJDb29yZGluYXRlcykgfTsKKyAgICBhdXRvIHRhcmdldCA9IGFkb3B0TlMoW1tVSVBy
ZXZpZXdUYXJnZXQgYWxsb2NdIGluaXRXaXRoQ29udGFpbmVyOnByZXZpZXdDb250YWluZXIgY2Vu
dGVyOmNlbnRlckluQ29udGFpbmVyQ29vcmRpbmF0ZXNdKTsKKworICAgIGF1dG8gaW1hZ2VWaWV3
ID0gYWRvcHROUyhbW1VJSW1hZ2VWaWV3IGFsbG9jXSBpbml0V2l0aEltYWdlOmltYWdlXSk7Cisg
ICAgW2ltYWdlVmlldyBzZXRGcmFtZTpmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXNdOworICAg
IHJldHVybiBhZG9wdE5TKFtbVUlUYXJnZXRlZFByZXZpZXcgYWxsb2NdIGluaXRXaXRoVmlldzpp
bWFnZVZpZXcuZ2V0KCkgcGFyYW1ldGVyczpwYXJhbWV0ZXJzLmdldCgpIHRhcmdldDp0YXJnZXQu
Z2V0KCldKTsKK30KKworLSAoVUlUYXJnZXRlZFByZXZpZXcgKilfdGFyZ2V0ZWRQcmV2aWV3Cit7
CisgICAgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmlzTGluayAmJiBfcG9zaXRpb25JbmZvcm1h
dGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZSkgeworICAgICAgICBbc2VsZiBfc3RhcnRT
dXBwcmVzc2luZ1NlbGVjdGlvbkFzc2lzdGFudEZvclJlYXNvbjpXZWJLaXQ6OkludGVyYWN0aW9u
SXNIYXBwZW5pbmddOworCisgICAgICAgIGF1dG8gaW5kaWNhdG9yID0gX3Bvc2l0aW9uSW5mb3Jt
YXRpb24ubGlua0luZGljYXRvcjsKKyAgICAgICAgYXV0byB0ZXh0SW5kaWNhdG9ySW1hZ2UgPSB1
aUltYWdlRm9ySW1hZ2UoaW5kaWNhdG9yLmNvbnRlbnRJbWFnZS5nZXQoKSk7CisKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZVRhcmdldGVkUHJldmlldyh0ZXh0SW5kaWNhdG9ySW1hZ2UuZ2V0KCksIHNl
bGYsIHNlbGYudW5zY2FsZWRWaWV3LCBpbmRpY2F0b3IudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcywgaW5kaWNhdG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0
ZXMsIFtVSUNvbG9yIGNvbG9yV2l0aENHQ29sb3I6Y2FjaGVkQ0dDb2xvcihpbmRpY2F0b3IuZXN0
aW1hdGVkQmFja2dyb3VuZENvbG9yKV0pLmF1dG9yZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYg
KChfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0F0dGFjaG1lbnQgfHwgX3Bvc2l0aW9uSW5mb3JtYXRp
b24uaXNJbWFnZSkgJiYgX3Bvc2l0aW9uSW5mb3JtYXRpb24uaW1hZ2UpIHsKKyAgICAgICAgW3Nl
bGYgX3N0YXJ0U3VwcHJlc3NpbmdTZWxlY3Rpb25Bc3Npc3RhbnRGb3JSZWFzb246V2ViS2l0OjpJ
bnRlcmFjdGlvbklzSGFwcGVuaW5nXTsKKworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
Y2dJbWFnZSA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdlLT5tYWtlQ0dJbWFnZUNvcHkoKTsK
KyAgICAgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENH
SW1hZ2U6Y2dJbWFnZS5nZXQoKV0pOworCisgICAgICAgIHJldHVybiBjcmVhdGVUYXJnZXRlZFBy
ZXZpZXcoaW1hZ2UuZ2V0KCksIHNlbGYsIHNlbGYudW5zY2FsZWRWaWV3LCBfcG9zaXRpb25JbmZv
cm1hdGlvbi5ib3VuZHMsIHsgfSwgbmlsKS5hdXRvcmVsZWFzZSgpOworICAgIH0KKworICAgIHJl
dHVybiBuaWw7Cit9CisKKy0gKFVJVGFyZ2V0ZWRQcmV2aWV3ICopY29udGV4dE1lbnVJbnRlcmFj
dGlvbjooVUlDb250ZXh0TWVudUludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gcHJldmlld0Zvckhp
Z2hsaWdodGluZ01lbnVXaXRoQ29uZmlndXJhdGlvbjooVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRp
b24gKiljb25maWd1cmF0aW9uCit7CisgICAgcmV0dXJuIFtzZWxmIF90YXJnZXRlZFByZXZpZXdd
OworfQorCistICh2b2lkKWNvbnRleHRNZW51SW50ZXJhY3Rpb25XaWxsUHJlc2VudDooVUlDb250
ZXh0TWVudUludGVyYWN0aW9uICopaW50ZXJhY3Rpb24KK3sKKyAgICBpZiAoIV93ZWJWaWV3KQor
ICAgICAgICByZXR1cm47CisgICAgYXV0byB1aURlbGVnYXRlID0gc3RhdGljX2Nhc3Q8aWQ8V0tV
SURlbGVnYXRlUHJpdmF0ZT4+KF93ZWJWaWV3LlVJRGVsZWdhdGUpOworICAgIGlmICghdWlEZWxl
Z2F0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVXaWxsUHJlc2VudEZvckVsZW1lbnQ6
KV0pCisgICAgICAgIFt1aURlbGVnYXRlIHdlYlZpZXc6X3dlYlZpZXcgY29udGV4dE1lbnVXaWxs
UHJlc2VudEZvckVsZW1lbnQ6X2NvbnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCldOworICAgIGVs
c2UgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6
Y29udGV4dE1lbnVXaWxsUHJlc2VudEZvckVsZW1lbnQ6KV0pIHsKKyAgICAgICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6
X3dlYlZpZXcgY29udGV4dE1lbnVXaWxsUHJlc2VudEZvckVsZW1lbnQ6X2NvbnRleHRNZW51RWxl
bWVudEluZm8uZ2V0KCldOworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19F
TkQKKyAgICB9Cit9CisKKy0gKFVJVGFyZ2V0ZWRQcmV2aWV3ICopY29udGV4dE1lbnVJbnRlcmFj
dGlvbjooVUlDb250ZXh0TWVudUludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gcHJldmlld0ZvckRp
c21pc3NpbmdNZW51V2l0aENvbmZpZ3VyYXRpb246KFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9u
ICopY29uZmlndXJhdGlvbgoreworICAgIHJldHVybiBbc2VsZiBfdGFyZ2V0ZWRQcmV2aWV3XTsK
K30KKworLSAodm9pZCljb250ZXh0TWVudUludGVyYWN0aW9uOihVSUNvbnRleHRNZW51SW50ZXJh
Y3Rpb24gKilpbnRlcmFjdGlvbiB3aWxsQ29tbWl0V2l0aEFuaW1hdG9yOihpZDxVSUNvbnRleHRN
ZW51SW50ZXJhY3Rpb25Db21taXRBbmltYXRpbmc+KWFuaW1hdG9yCit7CisgICAgaWYgKCFfd2Vi
VmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgW3NlbGYgX3N0b3BTdXBwcmVzc2luZ1NlbGVj
dGlvbkFzc2lzdGFudEZvclJlYXNvbjpXZWJLaXQ6OkludGVyYWN0aW9uSXNIYXBwZW5pbmddOwor
CisgICAgYXV0byB1aURlbGVnYXRlID0gc3RhdGljX2Nhc3Q8aWQ8V0tVSURlbGVnYXRlUHJpdmF0
ZT4+KF93ZWJWaWV3LlVJRGVsZWdhdGUpOworICAgIGlmICghdWlEZWxlZ2F0ZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG5lZWRzRGVwcmVjYXRlZFByZXZpZXdBUEkodWlEZWxlZ2F0ZSkp
IHsKKworICAgICAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNJbWFnZSkgeworICAgICAg
ICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZp
ZXc6Y29tbWl0UHJldmlld2VkSW1hZ2VXaXRoVVJMOildKSB7CisgICAgICAgICAgICAgICAgY29u
c3QgYXV0byYgaW1hZ2VVUkwgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi5pbWFnZVVSTDsKKyAgICAg
ICAgICAgICAgICBpZiAoaW1hZ2VVUkwuaXNFbXB0eSgpIHx8ICEoaW1hZ2VVUkwucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpIHx8IGltYWdlVVJMLnByb3RvY29sSXMoImRhdGEiKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19CRUdJTgorICAgICAgICAgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93
ZWJWaWV3IGNvbW1pdFByZXZpZXdlZEltYWdlV2l0aFVSTDooTlNVUkwgKilpbWFnZVVSTF07Cisg
ICAgICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoW3Vp
RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbW1pdFByZXZp
ZXdpbmdWaWV3Q29udHJvbGxlcjopXSkgeworICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgICAgIGlmIChhdXRvIHZpZXdDb250cm9sbGVyID0g
X2NvbnRleHRNZW51TGVnYWN5UHJldmlld0NvbnRyb2xsZXIuZ2V0KCkpCisgICAgICAgICAgICAg
ICAgW3VpRGVsZWdhdGUgd2ViVmlldzpfd2ViVmlldyBjb21taXRQcmV2aWV3aW5nVmlld0NvbnRy
b2xsZXI6dmlld0NvbnRyb2xsZXJdOworICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb21t
aXRQcmV2aWV3ZWRWaWV3Q29udHJvbGxlcjopXSkgeworICAgICAgICAgICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgICAgIGlmIChhdXRvIHZpZXdDb250cm9s
bGVyID0gX2NvbnRleHRNZW51TGVnYWN5UHJldmlld0NvbnRyb2xsZXIuZ2V0KCkpCisgICAgICAg
ICAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgY29tbWl0UHJldmlld2VkVmll
d0NvbnRyb2xsZXI6dmlld0NvbnRyb2xsZXJdOworICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Iod2ViVmlldzpjb250ZXh0TWVudUZvckVsZW1lbnQ6d2lsbENvbW1pdFdp
dGhBbmltYXRvcjopXSkKKyAgICAgICAgW3VpRGVsZWdhdGUgd2ViVmlldzpfd2ViVmlldyBjb250
ZXh0TWVudUZvckVsZW1lbnQ6X2NvbnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCkgd2lsbENvbW1p
dFdpdGhBbmltYXRvcjphbmltYXRvcl07CisgICAgZWxzZSBpZiAoW3VpRGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb250ZXh0TWVudUZvckVsZW1lbnQ6d2ls
bENvbW1pdFdpdGhBbmltYXRvcjopXSkgeworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19CRUdJTgorICAgICAgICBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBjb250
ZXh0TWVudUZvckVsZW1lbnQ6X2NvbnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCkgd2lsbENvbW1p
dFdpdGhBbmltYXRvcjphbmltYXRvcl07CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORAorICAgIH0KK30KKworLSAodm9pZCljb250ZXh0TWVudUludGVyYWN0aW9uRGlk
RW5kOihVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbgoreworICAgIGlmICgh
X3dlYlZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIFtzZWxmIF9zdG9wU3VwcHJlc3NpbmdT
ZWxlY3Rpb25Bc3Npc3RhbnRGb3JSZWFzb246V2ViS2l0OjpJbnRlcmFjdGlvbklzSGFwcGVuaW5n
XTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGRlbGVnYXRlIGlzIGJlaW5nIGNhbGxlZCBtb3JlIHRo
YW4gb25jZSBieSBVSUtpdC4gPHJkYXI6Ly9wcm9ibGVtLzUxNTUwMjkxPgorICAgIC8vIFRoaXMg
Y29uZGl0aW9uYWwgYXZvaWRzIHRoZSBXS1VJRGVsZWdhdGUgYmVpbmcgY2FsbGVkIHR3aWNlIHRv
by4KKyAgICBpZiAoIV9jb250ZXh0TWVudUVsZW1lbnRJbmZvKSB7CisgICAgICAgIGF1dG8gdWlE
ZWxlZ2F0ZSA9IHN0YXRpY19jYXN0PGlkPFdLVUlEZWxlZ2F0ZVByaXZhdGU+Pihfd2ViVmlldy5V
SURlbGVnYXRlKTsKKyAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Iod2ViVmlldzpjb250ZXh0TWVudURpZEVuZEZvckVsZW1lbnQ6KV0pCisgICAgICAg
ICAgICBbdWlEZWxlZ2F0ZSB3ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51RGlkRW5kRm9yRWxl
bWVudDpfY29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKV07CisgICAgICAgIGVsc2UgaWYgKFt1
aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1l
bnVEaWRFbmRGb3JFbGVtZW50OildKSB7CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19CRUdJTgorICAgICAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZp
ZXcgY29udGV4dE1lbnVEaWRFbmRGb3JFbGVtZW50Ol9jb250ZXh0TWVudUVsZW1lbnRJbmZvLmdl
dCgpXTsKKyAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAg
ICAgICB9CisgICAgfQorCisgICAgX2NvbnRleHRNZW51TGVnYWN5UHJldmlld0NvbnRyb2xsZXIg
PSBudWxscHRyOworICAgIF9jb250ZXh0TWVudUxlZ2FjeU1lbnUgPSBudWxscHRyOworICAgIF9j
b250ZXh0TWVudUhhc1JlcXVlc3RlZExlZ2FjeURhdGEgPSBOTzsKKyAgICBfY29udGV4dE1lbnVF
bGVtZW50SW5mbyA9IG51bGxwdHI7Cit9CisKK0BlbmQKKworI2Vsc2UKKworQGltcGxlbWVudGF0
aW9uIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb25QcmV2aWV3KQorCiAtICh2b2lkKV9yZWdp
c3RlclByZXZpZXcKIHsKICAgICBpZiAoIV93ZWJWaWV3LmFsbG93c0xpbmtQcmV2aWV3KQpAQCAt
Nzc2Niw3ICs4MzM4LDcgQEAgc3RhdGljIE5TU3RyaW5nICpwcmV2aWV3SWRlbnRpZmllckZvckVs
ZW1lbnRBY3Rpb24oX1dLRWxlbWVudEFjdGlvbiAqYWN0aW9uKQogCiBAZW5kCiAKLSNlbmRpZiAv
LyBVU0UoTE9OR19QUkVTU19GT1JfTElOS19QUkVWSUVXKQorI2VuZGlmIC8vIFVTRShVSUNPTlRF
WFRNRU5VKQogCiAjZW5kaWYgLy8gSEFWRShMSU5LX1BSRVZJRVcpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372444</attachid>
            <date>2019-06-19 02:05:04 -0700</date>
            <delta_ts>2019-06-19 02:17:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198986-20190619190503.patch</filename>
            <type>text/plain</type>
            <size>42996</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0OTM1YzQ1YzhmZmI4MzFhZjJkYjBk
MDkyNGRkMzcxZDM3NDE1M2UuLmYxMDc4MmMyNzhlODBlNzQ0Njg3OThkNDczNDA1YzFmNjI2NTJh
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDYtMTggIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBpbXBsZW1lbnRh
dGlvbiBmb3IgV0tDb250ZW50VmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk4OTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTg3NTE4OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVVNF
X1VJQ09OVEVYVE1FTlUgZm9yIGlPUyAxMysuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoK
KwogMjAxOS0wNi0xOCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBBZGQgcHJlbGltaW5hcnkgQU5HTEUgYmFja2VuZCB0byBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA1MDg0NzJlYzU5ODFiMzRkZTcwOWZhMmEzMzA2OGZiNmMwNDc2NzI3Li5lMDMy
MTBkYzY4OTc0MjU4ZDNlNjk1NTcyYmM4MmNiNDJiNWU5NWRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAxOS0wNi0xOCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CisKKyAgICAgICAgVUlDb250ZXh0TWVudUludGVyYWN0aW9uIGltcGxlbWVudGF0aW9uIGZv
ciBXS0NvbnRlbnRWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTg5ODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxODc1MTg5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluY2x1ZGUgKyBzb2Z0
IGxpbmsgRERDb250ZXh0TWVudUFjdGlvbi4KKworICAgICAgICAqIHBhbC9zcGkvaW9zL0RhdGFE
ZXRlY3RvcnNVSVNQSS5oOgorCiAyMDE5LTA2LTE4ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgTGluayB0byB0aGUgbmV3IEFwcFNTTyBwcml2YXRlIGZyYW1l
d29yawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCA1Yjc1NjliOTRlNDVmZGE3MTc4MGZiMGYyMTJlMDFlNzUwMGQxNGM1
Li45NGQ5OTQ3NmZmM2M0YWNlMzNhNDUwMTc2OTNiYjQ4YWRkNzUwMmNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ1IEBACisyMDE5LTA2LTE4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4K
KworICAgICAgICBVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24gaW1wbGVtZW50YXRpb24gZm9yIFdL
Q29udGVudFZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5ODk4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTE4NzUxODk+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFVJQ29udGV4
dE1lbnVJbnRlcmFjdGlvbiBhbmQgaXRzIGRlbGVnYXRlIGFzIGEKKyAgICAgICAgcmVwbGFjZW1l
bnQgZm9yIFVJUHJldmlld0l0ZW1Db250cm9sbGVyIGluIGlPUyAxMy4KKworICAgICAgICBJbiBv
cmRlciB0byBwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvdXIgYXMgbXVjaCBhcyBwb3NzaWJsZSwK
KyAgICAgICAgd2UgY2hlY2sgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBuZXcgV2ViS2l0IEFQ
SSB0byBjb25maWd1cmUKKyAgICAgICAgdGhlIG1lbnUuIElmIHRoYXQgaXMgbm90IHByZXNlbnQs
IHdlIGF0dGVtcHQgdG8gY29udmVydAorICAgICAgICB0aGUgcmVzdWx0cyBvZiB0aGUgZXhpc3Rp
bmcgV2ViS2l0IFdLUHJldmlld0FjdGlvbiBkZWxlZ2F0ZXMKKyAgICAgICAgaW50byBzb21ldGhp
bmcgdGhhdCB3b3JrcyB3aXRoIFVJQ29udGV4dE1lbnVzLgorCisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBz
ZXR1cEludGVyYWN0aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2NvbnRlbnRzT2ZV
c2VySW50ZXJmYWNlSXRlbTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVnaXN0ZXJQ
cmV2aWV3XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3VucmVnaXN0ZXJQcmV2aWV3XSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3Nob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hh
bmdlZDpdKToKKyAgICAgICAgKG5lZWRzRGVwcmVjYXRlZFByZXZpZXdBUEkpOgorICAgICAgICAo
dWlBY3Rpb25Gb3JQcmV2aWV3QWN0aW9uKToKKyAgICAgICAgKG1lbnVGcm9tUHJldmlld09yRGVm
YXVsdHMpOgorICAgICAgICAodGl0bGVGb3JNZW51KToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBhc3NpZ25MZWdhY3lEYXRhRm9yQ29udGV4dE1lbnVJbnRlcmFjdGlvbl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNvbnRleHRNZW51SW50ZXJhY3Rpb246Y29uZmlndXJhdGlvbkZvck1l
bnVBdExvY2F0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9jb250ZXh0TWVudUlu
dGVyYWN0aW9uOmNvbmZpZ3VyYXRpb25Gb3JNZW51QXRMb2NhdGlvbjpjb21wbGV0aW9uOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNvbnRpbnVlQ29udGV4dE1lbnVJbnRlcmFjdGlvbjpd
KToKKyAgICAgICAgKHVpSW1hZ2VGb3JJbWFnZSk6CisgICAgICAgIChjcmVhdGVUYXJnZXRlZFBy
ZXZpZXcpOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF90YXJnZXRlZFByZXZpZXddKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBjb250ZXh0TWVudUludGVyYWN0aW9uOnByZXZpZXdGb3JI
aWdobGlnaHRpbmdNZW51V2l0aENvbmZpZ3VyYXRpb246XSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgY29udGV4dE1lbnVJbnRlcmFjdGlvbldpbGxQcmVzZW50Ol0pOgorICAgICAgICAoLVtX
S0NvbnRlbnRWaWV3IGNvbnRleHRNZW51SW50ZXJhY3Rpb246cHJldmlld0ZvckRpc21pc3NpbmdN
ZW51V2l0aENvbmZpZ3VyYXRpb246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY29udGV4
dE1lbnVJbnRlcmFjdGlvbjp3aWxsQ29tbWl0V2l0aEFuaW1hdG9yOl0pOgorICAgICAgICAoLVtX
S0NvbnRlbnRWaWV3IGNvbnRleHRNZW51SW50ZXJhY3Rpb25EaWRFbmQ6XSk6CisgICAgICAgICgt
W1dLQ29udGVudFZpZXcgc2hvdWxkVXNlUHJldmlld0ZvckxvbmdQcmVzc10pOiBEZWxldGVkLgor
CiAyMDE5LTA2LTE4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVXBkYXRlIFdlYktpdCBBUEkgdG8gc2VwYXJhdGVseSByZXRyaWV2ZSBhY3Rp
b25zIGFuZCB1c2UgY29udGV4dCBtZW51cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggOGE1NmM2Y2YwNTMxNjgz
ZDkwZmMyMzk1ZTMyZWU4ZDk1NTgyNDNlMi4uODk3MzJhMDg2ZGJmODEyNGMxMzYyZWYyZjQ4YWVj
ZTgxM2VlMzgzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC0xNTg1LDMgKzE1ODUsNyBAQAogI2lmIChQTEFU
Rk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMCB8
fCBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAx
NTAwKQogI2RlZmluZSBIQVZFX0FQUF9TU08gMQogI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1Mp
ICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMAorI2RlZmluZSBV
U0VfVUlDT05URVhUTUVOVSAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL2lvcy9EYXRhRGV0ZWN0b3JzVUlTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL2lvcy9EYXRhRGV0ZWN0b3JzVUlTUEkuaAppbmRleCAwOWZjNTlmMjAzMTk5YjE0NWJi
NTU3MWRlYzc3ZmI4YzA5MjdiOGU0Li44MmJhNTAzODVmYjBmNzMzN2RkYTlhMDI4YjJiNDZiYWE3
NjYwMWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvRGF0YURl
dGVjdG9yc1VJU1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL0RhdGFE
ZXRlY3RvcnNVSVNQSS5oCkBAIC0zMSw2ICszMSw5IEBACiAjaWYgVVNFKEFQUExFX0lOVEVSTkFM
X1NESykKIAogI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0REQWN0aW9uLmg+CisjaWYgSEFWRShM
SU5LX1BSRVZJRVcpICYmIFVTRShVSUNPTlRFWFRNRU5VKQorI2ltcG9ydCA8RGF0YURldGVjdG9y
c1VJL0REQ29udGV4dE1lbnVBY3Rpb24uaD4KKyNlbmRpZgogI2ltcG9ydCA8RGF0YURldGVjdG9y
c1VJL0RERGV0ZWN0aW9uQ29udHJvbGxlci5oPgogCiAjZWxzZQpAQCAtNDYsNiArNDksMTMgQEAK
IEBwcm9wZXJ0eSAocmVhZG9ubHkpIE5TU3RyaW5nICphY3Rpb25VVEk7CiBAZW5kCiAKKyNpZiBI
QVZFKExJTktfUFJFVklFVykgJiYgVVNFKFVJQ09OVEVYVE1FTlUpCitAY2xhc3MgVUlDb250ZXh0
TWVudUNvbmZpZ3VyYXRpb247CitAaW50ZXJmYWNlIEREQ29udGV4dE1lbnVBY3Rpb24KKysgKFVJ
Q29udGV4dE1lbnVDb25maWd1cmF0aW9uICopY29udGV4dE1lbnVDb25maWd1cmF0aW9uV2l0aFVS
TDooTlNVUkwgKilVUkwgaW5WaWV3OihVSVZpZXcgKil2aWV3IGNvbnRleHQ6KE5TRGljdGlvbmFy
eSAqKWNvbnRleHQgbWVudUlkZW50aWZpZXI6KE5TU3RyaW5nICopbWVudUlkZW50aWZpZXI7CitA
ZW5kCisjZW5kaWYKKwogQHByb3RvY29sIERERGV0ZWN0aW9uQ29udHJvbGxlckludGVyYWN0aW9u
RGVsZWdhdGUgPE5TT2JqZWN0PgogQGVuZAogCkBAIC03MCw2ICs4MCw5IEBACiBAZW5kCiAKIFNP
RlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhEYXRhRGV0ZWN0b3JzVUkpCisjaWYgSEFWRShMSU5L
X1BSRVZJRVcpICYmIFVTRShVSUNPTlRFWFRNRU5VKQorU09GVF9MSU5LX0NMQVNTKERhdGFEZXRl
Y3RvcnNVSSwgRERDb250ZXh0TWVudUFjdGlvbik7CisjZW5kaWYKIFNPRlRfTElOS19DTEFTUyhE
YXRhRGV0ZWN0b3JzVUksIERERGV0ZWN0aW9uQ29udHJvbGxlcikKIFNPRlRfTElOS19DT05TVEFO
VChEYXRhRGV0ZWN0b3JzVUksIGtEYXRhRGV0ZWN0b3JzTGVhZGluZ1RleHQsIGNvbnN0IE5TU3Ry
aW5nICopCiBTT0ZUX0xJTktfQ09OU1RBTlQoRGF0YURldGVjdG9yc1VJLCBrRGF0YURldGVjdG9y
c1RyYWlsaW5nVGV4dCwgY29uc3QgTlNTdHJpbmcgKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9z
cGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggNzQ0NDQ4OTkyODAwOWNlOGY5ZjExZDFlNDMyMzlhZjE0
ODI2ZThiYS4uYjViN2YxYjdiMjNiNTc0ZTAzZjRhNGRjN2ZhNjNhOWFlYjQyZjZiZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTExNzksNiArMTE3OSwx
OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY3VycmVudFVzZXJJbnRlcmZhY2VJZGlvbUlzUGFkKCkK
IC0gKHZvaWQpc2V0TmV4dFByZXZpb3VzSXRlbXNWaXNpYmxlOihCT09MKXZpc2libGU7CiBAZW5k
CiAKKyNpZiBIQVZFKExJTktfUFJFVklFVykgJiYgVVNFKFVJQ09OVEVYVE1FTlUpCitAaW50ZXJm
YWNlIFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uIChOZWVkZWRVbnRpbDUxMjg4NDM1Rml4ZWQp
CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgaWQgPE5TQ29weWluZz4gaWRlbnRpZmllcjsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBVSUNvbnRleHRNZW51Q29udGVudFByZXZpZXdQ
cm92aWRlciBwcmV2aWV3UHJvdmlkZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgVUlD
b250ZXh0TWVudUFjdGlvblByb3ZpZGVyIGFjdGlvblByb3ZpZGVyOworQGVuZAorCitAaW50ZXJm
YWNlIFVJUHJldmlld0FjdGlvbiAoKQorQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgVUlJ
bWFnZSAqaW1hZ2U7CitAZW5kCisKKyNlbmRpZgorCiBXVEZfRVhURVJOX0NfQkVHSU4KIAogQk9P
TCBVSUtleWJvYXJkRW5hYmxlZElucHV0TW9kZXNBbGxvd09uZVRvTWFueVNob3J0Y3V0cyh2b2lk
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24uaAppbmRleCAzZTU3MDE3Y2FhZjBkZGE3N2JkMTI5MDlkZTNhNzFjNWY1ZTdi
MTkxLi4zMGMwYWRiMjFhYjdjYjFkZDdkOTI4MjQ0ODEzZTYyYTMwOGM0M2Q1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5oCkBAIC01OSwxMCArNTksNiBAQAogI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CiAjaW1w
b3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
ICYmIF9faGFzX2luY2x1ZGUoPFdlYktpdEFkZGl0aW9ucy9XS0ludGVyYWN0aW9uUHJldmlld0Fk
ZGl0aW9ucy5oPikKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XS0ludGVyYWN0aW9uUHJldmll
d0FkZGl0aW9ucy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgT3BlblBhbmVs
UGFyYW1ldGVyczsKIH0KQEAgLTEwMSw2ICs5Nyw3IEBAIHN0cnVjdCBXZWJBdXRvY29ycmVjdGlv
bkNvbnRleHQ7CiBAY2xhc3MgVUlIb3Zlckdlc3R1cmVSZWNvZ25pemVyOwogQGNsYXNzIFdlYkV2
ZW50OwogQGNsYXNzIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQ7CitAY2xhc3MgV0tDb250ZXh0TWVu
dUVsZW1lbnRJbmZvOwogQGNsYXNzIFdLRHJhd2luZ0Nvb3JkaW5hdG9yOwogQGNsYXNzIFdLRm9j
dXNlZEZvcm1Db250cm9sVmlldzsKIEBjbGFzcyBXS0Zvcm1JbnB1dENvbnRyb2w7CkBAIC0yNDUs
OCArMjQyLDEzIEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAgICAgUmV0YWluUHRy
PFVJR2VzdHVyZVJlY29nbml6ZXI+IF9wcmV2aWV3U2Vjb25kYXJ5R2VzdHVyZVJlY29nbml6ZXI7
CiAgICAgVmVjdG9yPGJvb2w+IF9mb2N1c1N0YXRlU3RhY2s7CiAjaWYgSEFWRShMSU5LX1BSRVZJ
RVcpCi0jaWYgVVNFKExPTkdfUFJFU1NfRk9SX0xJTktfUFJFVklFVykKLSAgICBMT05HX1BSRVNT
X0xJTktfUFJFVklFV19NRU1CRVJTCisjaWYgVVNFKFVJQ09OVEVYVE1FTlUpCisgICAgUmV0YWlu
UHRyPFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbj4gX2NvbnRleHRNZW51SW50ZXJhY3Rpb247Cisg
ICAgUmV0YWluUHRyPFdLQ29udGV4dE1lbnVFbGVtZW50SW5mbz4gX2NvbnRleHRNZW51RWxlbWVu
dEluZm87CisgICAgQk9PTCBfc2hvd0xpbmtQcmV2aWV3czsKKyAgICBSZXRhaW5QdHI8VUlWaWV3
Q29udHJvbGxlcj4gX2NvbnRleHRNZW51TGVnYWN5UHJldmlld0NvbnRyb2xsZXI7CisgICAgUmV0
YWluUHRyPFVJTWVudT4gX2NvbnRleHRNZW51TGVnYWN5TWVudTsKKyAgICBCT09MIF9jb250ZXh0
TWVudUhhc1JlcXVlc3RlZExlZ2FjeURhdGE7CiAjZWxzZQogICAgIFJldGFpblB0cjxVSVByZXZp
ZXdJdGVtQ29udHJvbGxlcj4gX3ByZXZpZXdJdGVtQ29udHJvbGxlcjsKICNlbmRpZgpAQCAtNTMy
LDE3ICs1MzQsMTMgQEAgRk9SX0VBQ0hfUFJJVkFURV9XS0NPTlRFTlRWSUVXX0FDVElPTihERUNM
QVJFX1dLQ09OVEVOVFZJRVdfQUNUSU9OX0ZPUl9XRUJfVklFVykKIEBlbmQKIAogI2lmIEhBVkUo
TElOS19QUkVWSUVXKQotI2lmIFVTRShMT05HX1BSRVNTX0ZPUl9MSU5LX1BSRVZJRVcpCi1AaW50
ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb25QcmV2aWV3KSA8TE9OR19QUkVTU19M
SU5LX1BSRVZJRVdfUFJPVE9DT0w+CisjaWYgVVNFKFVJQ09OVEVYVE1FTlUpCitAaW50ZXJmYWNl
IFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb25QcmV2aWV3KSA8VUlDb250ZXh0TWVudUludGVy
YWN0aW9uRGVsZWdhdGU+CiAjZWxzZQogQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3IChXS0ludGVy
YWN0aW9uUHJldmlldykgPFVJUHJldmlld0l0ZW1EZWxlZ2F0ZT4KICNlbmRpZgotCi1AcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgc2hvdWxkVXNlUHJldmlld0ZvckxvbmdQcmVz
czsKLQogLSAodm9pZClfcmVnaXN0ZXJQcmV2aWV3OwogLSAodm9pZClfdW5yZWdpc3RlclByZXZp
ZXc7Ci0KIEBlbmQKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCA1Y2FjZTA0YmU2ZTA4OTFl
OWFlYzY5MTRmYTAwNjMzOTM1M2FhZmRmLi5jOGM0ZGM1YzQ2MDQ2NmI0MjdiM2FjYjkwOGM3YTRi
YWQ5MWYxY2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogCiAjaW1wb3J0ICJBUElVSUNsaWVudC5oIgorI2ltcG9ydCAiQ29tcGxl
dGlvbkhhbmRsZXJDYWxsQ2hlY2tlci5oIgogI2ltcG9ydCAiRG9jdW1lbnRFZGl0aW5nQ29udGV4
dC5oIgogI2ltcG9ydCAiRWRpdGFibGVJbWFnZUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIklucHV0
Vmlld1VwZGF0ZURlZmVycmVyLmgiCkBAIC0xMDUsNiArMTA2LDggQEAKICNpbXBvcnQgPHBhbC9z
cGkvY29jb2EvRGF0YURldGVjdG9yc0NvcmVTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvaW9zL0Rh
dGFEZXRlY3RvcnNVSVNQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9pb3MvR3JhcGhpY3NTZXJ2aWNl
c1NQSS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0
Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KQEAgLTE1MSw4ICsxNTQsOSBA
QCBTT0ZUX0xJTktfQ0xBU1MoTWFuYWdlZENvbmZpZ3VyYXRpb24sIE1DUHJvZmlsZUNvbm5lY3Rp
b24pOwogU09GVF9MSU5LX0NPTlNUQU5UKE1hbmFnZWRDb25maWd1cmF0aW9uLCBNQ0ZlYXR1cmVE
ZWZpbml0aW9uTG9va3VwQWxsb3dlZCwgTlNTdHJpbmcgKikKICNlbmRpZgogCi0jaWYgVVNFKEFQ
UExFX0lOVEVSTkFMX1NESykgJiYgX19oYXNfaW5jbHVkZSg8V2ViS2l0QWRkaXRpb25zL1dLSW50
ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+KQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1dL
SW50ZXJhY3Rpb25QcmV2aWV3QWRkaXRpb25zLmg+CisjaWYgSEFWRShMSU5LX1BSRVZJRVcpICYm
IFVTRShVSUNPTlRFWFRNRU5VKQorc3RhdGljIE5TU3RyaW5nICogY29uc3Qgd2Via2l0U2hvd0xp
bmtQcmV2aWV3c1ByZWZlcmVuY2VLZXkgPSBAIldlYktpdFNob3dMaW5rUHJldmlld3MiOworc3Rh
dGljIE5TU3RyaW5nICogY29uc3Qgd2Via2l0U2hvd0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFu
Z2VkTm90aWZpY2F0aW9uID0gQCJXZWJLaXRTaG93TGlua1ByZXZpZXdzUHJlZmVyZW5jZUNoYW5n
ZWQiOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXQVRDSE9TKQpAQCAtNzY0LDE0ICs3NjgsMTAg
QEAgc3RhdGljIGlubGluZSBib29sIGhhc0ZvY3VzZWRFbGVtZW50KFdlYktpdDo6Rm9jdXNlZEVs
ZW1lbnRJbmZvcm1hdGlvbiBmb2N1c2VkRWwKICAgICBbX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1
cmVSZWNvZ25pemVyIHNldERlbGF5OmhpZ2hsaWdodERlbGF5XTsKICAgICBbX2hpZ2hsaWdodExv
bmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOwogCi0jaWYgSEFWRShM
SU5LX1BSRVZJRVcpCi0gICAgaWYgKCFzZWxmLnNob3VsZFVzZVByZXZpZXdGb3JMb25nUHJlc3Mp
CisjaWYgSEFWRShMSU5LX1BSRVZJRVcpICYmICFVU0UoVUlDT05URVhUTUVOVSkKKyAgICBbc2Vs
ZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6
ZXIuZ2V0KCldOworICAgIFtzZWxmIF9jcmVhdGVBbmRDb25maWd1cmVMb25nUHJlc3NHZXN0dXJl
UmVjb2duaXplcl07CiAjZW5kaWYKLSAgICB7Ci0gICAgICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNv
Z25pemVyOl9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKV07Ci0KLSAg
ICAgICAgW3NlbGYgX2NyZWF0ZUFuZENvbmZpZ3VyZUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
XTsKLSAgICB9CiAKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAgICBbc2VsZiBzZXR1
cERyYWdBbmREcm9wSW50ZXJhY3Rpb25zXTsKQEAgLTczNjcsNyArNzM2Nyw3IEBAIHN0YXRpYyBX
ZWJFdmVudEZsYWdzIHdlYkV2ZW50RmxhZ3NGb3JVSUtleU1vZGlmaWVyRmxhZ3MoVUlLZXlNb2Rp
ZmllckZsYWdzIGZsYWdzCiAKICNpZiBIQVZFKExJTktfUFJFVklFVykKICAgICBpZiAoW3VzZXJJ
bnRlcmZhY2VJdGVtIGlzRXF1YWxUb1N0cmluZzpAImxpbmtQcmV2aWV3UG9wb3ZlckNvbnRlbnRz
Il0pIHsKLSNpZiBVU0UoTE9OR19QUkVTU19GT1JfTElOS19QUkVWSUVXKQorI2lmIFVTRShVSUNP
TlRFWFRNRU5VKQogICAgICAgICByZXR1cm4gQHsgdXNlckludGVyZmFjZUl0ZW06IEB7IEAicGFn
ZVVSTCI6IFdURjo6dXNlclZpc2libGVTdHJpbmcoX3Bvc2l0aW9uSW5mb3JtYXRpb24udXJsKSB9
IH07CiAjZWxzZQogICAgICAgICBOU1N0cmluZyAqdXJsID0gW19wcmV2aWV3SXRlbUNvbnRyb2xs
ZXIgcHJldmlld0RhdGFdW1VJUHJldmlld0RhdGFMaW5rXTsKQEAgLTc0MTEsMTcgKzc0MTEsNTg4
IEBAIHN0YXRpYyBOU1N0cmluZyAqcHJldmlld0lkZW50aWZpZXJGb3JFbGVtZW50QWN0aW9uKF9X
S0VsZW1lbnRBY3Rpb24gKmFjdGlvbikKICAgICByZXR1cm4gbmlsOwogfQogCi0jaWYgVVNFKExP
TkdfUFJFU1NfRk9SX0xJTktfUFJFVklFVykKLSNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvV0tJ
bnRlcmFjdGlvblByZXZpZXdBZGRpdGlvbnMubW0+Ci0jZWxzZQorI2lmIFVTRShVSUNPTlRFWFRN
RU5VKQogCiBAaW1wbGVtZW50YXRpb24gV0tDb250ZW50VmlldyAoV0tJbnRlcmFjdGlvblByZXZp
ZXcpCiAKLS0gKEJPT0wpc2hvdWxkVXNlUHJldmlld0ZvckxvbmdQcmVzcworLSAodm9pZClfcmVn
aXN0ZXJQcmV2aWV3CiB7Ci0gICAgcmV0dXJuIE5POworICAgIGlmICghX3dlYlZpZXcuYWxsb3dz
TGlua1ByZXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIF9jb250ZXh0TWVudUludGVyYWN0
aW9uID0gYWRvcHROUyhbW1VJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBhbGxvY10gaW5pdFdpdGhE
ZWxlZ2F0ZTpzZWxmXSk7CisgICAgX2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSA9
IE5POworICAgIFtzZWxmIGFkZEludGVyYWN0aW9uOl9jb250ZXh0TWVudUludGVyYWN0aW9uLmdl
dCgpXTsKKworICAgIFtzZWxmIF9zaG93TGlua1ByZXZpZXdzUHJlZmVyZW5jZUNoYW5nZWQ6bmls
XTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2
ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3Nob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hh
bmdlZDopIG5hbWU6d2Via2l0U2hvd0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFuZ2VkTm90aWZp
Y2F0aW9uIG9iamVjdDpuaWxdOworfQorCistICh2b2lkKV91bnJlZ2lzdGVyUHJldmlldworewor
ICAgIGlmICghX2NvbnRleHRNZW51SW50ZXJhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAg
IFtzZWxmIHJlbW92ZUludGVyYWN0aW9uOl9jb250ZXh0TWVudUludGVyYWN0aW9uLmdldCgpXTsK
KyAgICBfY29udGV4dE1lbnVJbnRlcmFjdGlvbiA9IG5pbDsKKworICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOndlYmtpdFNo
b3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsK
K30KKworLSAodm9pZClfc2hvd0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFuZ2VkOihOU05vdGlm
aWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIEJvb2xlYW4ga2V5RXhpc3RzQW5kSGFzVmFs
aWRGb3JtYXQgPSBmYWxzZTsKKyAgICBCb29sZWFuIHByZWZWYWx1ZSA9IENGUHJlZmVyZW5jZXNH
ZXRBcHBCb29sZWFuVmFsdWUoKF9fYnJpZGdlIENGU3RyaW5nUmVmKXdlYmtpdFNob3dMaW5rUHJl
dmlld3NQcmVmZXJlbmNlS2V5LCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRBcHBsaWNhdGlvbiwgJmtl
eUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0KTsKKyAgICBpZiAoa2V5RXhpc3RzQW5kSGFzVmFsaWRG
b3JtYXQpCisgICAgICAgIF9zaG93TGlua1ByZXZpZXdzID0gcHJlZlZhbHVlOworICAgIGVsc2UK
KyAgICAgICAgX3Nob3dMaW5rUHJldmlld3MgPSBZRVM7Cit9CisKK3N0YXRpYyBib29sIG5lZWRz
RGVwcmVjYXRlZFByZXZpZXdBUEkoaWQ8V0tVSURlbGVnYXRlPiBkZWxlZ2F0ZSkKK3sKKyAgICAv
LyBGSVhNRTogUmVwbGFjZSB0aGVzZSB3aXRoIGJvb2xlYW5zIGluIFVJRGVsZWdhdGUuaC4KKyAg
ICByZXR1cm4gZGVsZWdhdGUKKyAgICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yRWxlbWVudDpjb21w
bGV0aW9uSGFuZGxlcjopXQorICAgICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51Q29uZmlndXJhdGlvbkZvckVsZW1lbnQ6Y29tcGxl
dGlvbkhhbmRsZXI6KV0KKyAgICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVGb3JFbGVtZW50OndpbGxDb21taXRXaXRoQW5pbWF0
b3I6KV0KKyAgICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2Vi
Vmlldzpjb250ZXh0TWVudUZvckVsZW1lbnQ6d2lsbENvbW1pdFdpdGhBbmltYXRvcjopXQorICAg
ICYmICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb250
ZXh0TWVudVdpbGxQcmVzZW50Rm9yRWxlbWVudDopXQorICAgICYmICFbZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51V2lsbFByZXNlbnRGb3JF
bGVtZW50OildCisgICAgJiYgIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KF93ZWJWaWV3OmNvbnRleHRNZW51RGlkRW5kRm9yRWxlbWVudDopXQorICAgICYmICFbZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51RGlkRW5k
Rm9yRWxlbWVudDopXQorICAgICYmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcih3ZWJWaWV3OnNob3VsZFByZXZpZXdFbGVtZW50OildCisgICAgICAgIHx8IFtkZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6cHJldmlld2luZ1ZpZXdDb250
cm9sbGVyRm9yRWxlbWVudDpkZWZhdWx0QWN0aW9uczopXQorICAgICAgICB8fCBbZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbW1pdFByZXZpZXdpbmdWaWV3
Q29udHJvbGxlcjopXQorICAgICAgICB8fCBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2ViVmlldzpwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JVUkw6ZGVmYXVsdEFjdGlv
bnM6ZWxlbWVudEluZm86KV0KKyAgICAgICAgfHwgW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoX3dlYlZpZXc6cHJldmlld1ZpZXdDb250cm9sbGVyRm9yVVJMOildCisgICAg
ICAgIHx8IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnBy
ZXZpZXdWaWV3Q29udHJvbGxlckZvckltYWdlOmFsdGVybmF0ZVVSTDpkZWZhdWx0QWN0aW9uczpl
bGVtZW50SW5mbzopXSk7Cit9CisKK0FMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lO
CitzdGF0aWMgTlNBcnJheTxXS1ByZXZpZXdBY3Rpb24gKj4gKndrUHJldmlld0FjdGlvbnNGcm9t
RWxlbWVudEFjdGlvbnMoTlNBcnJheTxfV0tFbGVtZW50QWN0aW9uICo+ICplbGVtZW50QWN0aW9u
cywgX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKmVsZW1lbnRJbmZvKQoreworICAgIE5TTXV0YWJs
ZUFycmF5PFdLUHJldmlld0FjdGlvbiAqPiAqcHJldmlld0FjdGlvbnMgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXlXaXRoQ2FwYWNpdHk6W2VsZW1lbnRBY3Rpb25zIGNvdW50XV07CisgICAgZm9yIChf
V0tFbGVtZW50QWN0aW9uICplbGVtZW50QWN0aW9uIGluIGVsZW1lbnRBY3Rpb25zKSB7CisgICAg
ICAgIFdLUHJldmlld0FjdGlvbiAqcHJldmlld0FjdGlvbiA9IFtXS1ByZXZpZXdBY3Rpb24gYWN0
aW9uV2l0aElkZW50aWZpZXI6cHJldmlld0lkZW50aWZpZXJGb3JFbGVtZW50QWN0aW9uKGVsZW1l
bnRBY3Rpb24pIHRpdGxlOmVsZW1lbnRBY3Rpb24udGl0bGUgc3R5bGU6VUlQcmV2aWV3QWN0aW9u
U3R5bGVEZWZhdWx0IGhhbmRsZXI6XihVSVByZXZpZXdBY3Rpb24gKiwgVUlWaWV3Q29udHJvbGxl
ciAqKSB7CisgICAgICAgICAgICBbZWxlbWVudEFjdGlvbiBydW5BY3Rpb25XaXRoRWxlbWVudElu
Zm86ZWxlbWVudEluZm9dOworICAgICAgICB9XTsKKyAgICAgICAgcHJldmlld0FjdGlvbi5pbWFn
ZSA9IFtfV0tFbGVtZW50QWN0aW9uIGltYWdlRm9yRWxlbWVudEFjdGlvblR5cGU6ZWxlbWVudEFj
dGlvbi50eXBlXTsKKyAgICAgICAgW3ByZXZpZXdBY3Rpb25zIGFkZE9iamVjdDpwcmV2aWV3QWN0
aW9uXTsKKyAgICB9CisgICAgcmV0dXJuIHByZXZpZXdBY3Rpb25zOworfQorCitzdGF0aWMgVUlB
Y3Rpb24gKnVpQWN0aW9uRm9yUHJldmlld0FjdGlvbihVSVByZXZpZXdBY3Rpb24gKnByZXZpZXdB
Y3Rpb24sIFVJVmlld0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJvbGxlcikKK3sKKyAgICAv
LyBVSVByZXZpZXdBY3Rpb25JdGVtLmltYWdlIGlzIFNQSSwgc28gbm8gZXh0ZXJuYWwgY2xpZW50
cyB3aWxsIGJlIGFibGUKKyAgICAvLyB0byBwcm92aWRlIGdseXBocyBmb3IgYWN0aW9ucyA8cmRh
cjovL3Byb2JsZW0vNTAxNTE4NTU+LgorICAgIC8vIEhvd2V2ZXIsIHRoZXkgc2hvdWxkIG1pZ3Jh
dGUgdG8gdGhlIG5ldyBBUEkuCisKKyAgICByZXR1cm4gW1VJQWN0aW9uIGFjdGlvbldpdGhUaXRs
ZTpwcmV2aWV3QWN0aW9uLnRpdGxlIGltYWdlOnByZXZpZXdBY3Rpb24uaW1hZ2UgaWRlbnRpZmll
cjpuaWwgaGFuZGxlcjpeKFVJQWN0aW9uICphY3Rpb24pIHsKKyAgICAgICAgcHJldmlld0FjdGlv
bi5oYW5kbGVyKHByZXZpZXdBY3Rpb24sIHByZXZpZXdWaWV3Q29udHJvbGxlcik7CisgICAgfV07
Cit9CitBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKworc3RhdGljIE5TQXJyYXk8
VUlNZW51RWxlbWVudCAqPiAqbWVudUVsZW1lbnRzRnJvbVByZXZpZXdPckRlZmF1bHRzKFVJVmll
d0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJvbGxlciwgY29uc3QgUmV0YWluUHRyPE5TQXJy
YXk+JiBkZWZhdWx0RWxlbWVudEFjdGlvbnMsIFJldGFpblB0cjxfV0tBY3RpdmF0ZWRFbGVtZW50
SW5mbz4gZWxlbWVudEluZm8pCit7CisgICAgYXV0byBhY3Rpb25zID0gW05TTXV0YWJsZUFycmF5
IGFycmF5V2l0aENhcGFjaXR5OmRlZmF1bHRFbGVtZW50QWN0aW9ucy5nZXQoKS5jb3VudF07CisK
KyAgICAvLyBPbmUgb2YgdGhlIGRlbGVnYXRlcyBtYXkgaGF2ZSBwcm92aWRlZCBhIFVJVmlld0Nv
bnRyb2xsZXIgd2l0aCBhIHByZXZpZXdBY3Rpb25JdGVtcyBhcnJheS4gSWYgc28sCisgICAgLy8g
d2UgbmVlZCB0byBjb252ZXJ0IGVhY2ggVUlQcmV2aWV3QWN0aW9uSXRlbSBpbnRvIGEgVUlBY3Rp
b24uCisgICAgaWYgKHByZXZpZXdWaWV3Q29udHJvbGxlcikgeworICAgICAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBOU0FycmF5PGlkPFVJUHJldmlld0Fj
dGlvbkl0ZW0+PiAqcHJldmlld0FjdGlvbnMgPSBwcmV2aWV3Vmlld0NvbnRyb2xsZXIucHJldmll
d0FjdGlvbkl0ZW1zOworICAgICAgICBmb3IgKFVJUHJldmlld0FjdGlvbiAqcHJldmlld0FjdGlv
biBpbiBwcmV2aWV3QWN0aW9ucykKKyAgICAgICAgICAgIFthY3Rpb25zIGFkZE9iamVjdDp1aUFj
dGlvbkZvclByZXZpZXdBY3Rpb24ocHJldmlld0FjdGlvbiwgcHJldmlld1ZpZXdDb250cm9sbGVy
KV07CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgIH0KKwor
ICAgIGlmICghW2FjdGlvbnMgY291bnRdKSB7CisgICAgICAgIC8vIFdlIGVpdGhlciBkaWRuJ3Qg
Z2V0IGEgY3VzdG9tIHByZXZpZXcgVUlWaWV3Q29udHJvbGxlciwgb3IgaXQgZGlkbid0IHByb3Zp
ZGUgYW55IGFjdGlvbnMKKyAgICAgICAgLy8gc28gd2Ugc2hvdWxkIHVzZSB0aGUgZGVmYXVsdCBz
ZXQuCisgICAgICAgIGZvciAoX1dLRWxlbWVudEFjdGlvbiAqZWxlbWVudEFjdGlvbiBpbiBkZWZh
dWx0RWxlbWVudEFjdGlvbnMuZ2V0KCkpIHsKKyAgICAgICAgICAgIFVJSW1hZ2UgKmltYWdlID0g
W19XS0VsZW1lbnRBY3Rpb24gaW1hZ2VGb3JFbGVtZW50QWN0aW9uVHlwZTplbGVtZW50QWN0aW9u
LnR5cGVdOworCisgICAgICAgICAgICBbYWN0aW9ucyBhZGRPYmplY3Q6W1VJQWN0aW9uIGFjdGlv
bldpdGhUaXRsZTplbGVtZW50QWN0aW9uLnRpdGxlIGltYWdlOmltYWdlIGlkZW50aWZpZXI6bmls
IGhhbmRsZXI6XihVSUFjdGlvbiAqKSB7CisgICAgICAgICAgICAgICAgW2VsZW1lbnRBY3Rpb24g
cnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOmVsZW1lbnRJbmZvLmdldCgpXTsKKyAgICAgICAgICAg
IH1dXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhY3Rpb25zOworfQorCitzdGF0
aWMgVUlNZW51ICptZW51RnJvbVByZXZpZXdPckRlZmF1bHRzKFVJVmlld0NvbnRyb2xsZXIgKnBy
ZXZpZXdWaWV3Q29udHJvbGxlciwgY29uc3QgUmV0YWluUHRyPE5TQXJyYXk+JiBkZWZhdWx0RWxl
bWVudEFjdGlvbnMsIFJldGFpblB0cjxfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbz4gZWxlbWVudElu
Zm8sIE5TU3RyaW5nICp0aXRsZSkKK3sKKyAgICBhdXRvIGFjdGlvbnMgPSBtZW51RWxlbWVudHNG
cm9tUHJldmlld09yRGVmYXVsdHMocHJldmlld1ZpZXdDb250cm9sbGVyLCBkZWZhdWx0RWxlbWVu
dEFjdGlvbnMsIGVsZW1lbnRJbmZvKTsKKyAgICByZXR1cm4gW1VJTWVudSBtZW51V2l0aFRpdGxl
OnRpdGxlIGNoaWxkcmVuOmFjdGlvbnNdOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnRpdGxlRm9y
TWVudShib29sIGlzTGluaywgYm9vbCBzaG93TGlua1ByZXZpZXdzLCBjb25zdCBVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBpZiAoaXNMaW5rICYmICFzaG93TGlua1ByZXZp
ZXdzKSB7CisgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKFdU
Rjo6cHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV0VC
X1VJX1NUUklOR19LRVkoIkphdmFTY3JpcHQiLCAiSmF2YVNjcmlwdCBBY3Rpb24gU2hlZXQgVGl0
bGUiLCAiVGl0bGUgZm9yIGFjdGlvbiBzaGVldCBmb3IgSmF2YVNjcmlwdCBsaW5rIik7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjp1c2VyVmlzaWJsZVN0cmluZyh1cmwpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIGlmICghaXNMaW5rICYmICF0aXRsZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB0aXRsZTsKKworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpYXNzaWduTGVnYWN5RGF0
YUZvckNvbnRleHRNZW51SW50ZXJhY3Rpb24KK3sKKyAgICBBU1NFUlQoIV9jb250ZXh0TWVudUhh
c1JlcXVlc3RlZExlZ2FjeURhdGEpOworICAgIGlmIChfY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRM
ZWdhY3lEYXRhKQorICAgICAgICByZXR1cm47CisgICAgX2NvbnRleHRNZW51SGFzUmVxdWVzdGVk
TGVnYWN5RGF0YSA9IFlFUzsKKworICAgIGlmICghX3dlYlZpZXcpCisgICAgICAgIHJldHVybjsK
KyAgICBhdXRvIHVpRGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxpZDxXS1VJRGVsZWdhdGVQcml2YXRl
Pj4oX3dlYlZpZXcuVUlEZWxlZ2F0ZSk7CisgICAgaWYgKCF1aURlbGVnYXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBhdXRvJiB1cmwgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi51cmw7
CisKKyAgICBfcGFnZS0+c3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50QXRQb3NpdGlvbihfcG9z
aXRpb25JbmZvcm1hdGlvbi5yZXF1ZXN0LnBvaW50KTsKKworICAgIFVJVmlld0NvbnRyb2xsZXIg
KnByZXZpZXdWaWV3Q29udHJvbGxlciA9IG5pbDsKKworICAgIGF1dG8gZWxlbWVudEluZm8gPSBh
ZG9wdE5TKFtbX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gYWxsb2NdIF9pbml0V2l0aEludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOl9wb3NpdGlvbkluZm9ybWF0aW9uXSk7CisKKyAgICBp
ZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rKSB7CisgICAgICAgIF9sb25nUHJlc3NDYW5D
bGljayA9IE5POworCisgICAgICAgIFJldGFpblB0cjxOU0FycmF5PF9XS0VsZW1lbnRBY3Rpb24g
Kj4+IGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudCA9IFtfYWN0aW9uU2hlZXRBc3Npc3RhbnQg
ZGVmYXVsdEFjdGlvbnNGb3JMaW5rU2hlZXQ6ZWxlbWVudEluZm8uZ2V0KCldOworCisgICAgICAg
IC8vIEZJWE1FOiBBbmltYXRlZCBpbWFnZXMgZ28gaGVyZS4KKworICAgICAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnByZXZpZXdpbmdWaWV3Q29udHJvbGxlckZv
ckVsZW1lbnQ6ZGVmYXVsdEFjdGlvbnM6KV0pIHsKKyAgICAgICAgICAgIGF1dG8gZGVmYXVsdEFj
dGlvbnMgPSB3a1ByZXZpZXdBY3Rpb25zRnJvbUVsZW1lbnRBY3Rpb25zKGRlZmF1bHRBY3Rpb25z
RnJvbUFzc2lzdGFudC5nZXQoKSwgZWxlbWVudEluZm8uZ2V0KCkpOworICAgICAgICAgICAgYXV0
byBwcmV2aWV3RWxlbWVudEluZm8gPSBhZG9wdE5TKFtbV0tQcmV2aWV3RWxlbWVudEluZm8gYWxs
b2NdIF9pbml0V2l0aExpbmtVUkw6dXJsXSk7CisgICAgICAgICAgICBwcmV2aWV3Vmlld0NvbnRy
b2xsZXIgPSBbdWlEZWxlZ2F0ZSB3ZWJWaWV3Ol93ZWJWaWV3IHByZXZpZXdpbmdWaWV3Q29udHJv
bGxlckZvckVsZW1lbnQ6cHJldmlld0VsZW1lbnRJbmZvLmdldCgpIGRlZmF1bHRBY3Rpb25zOmRl
ZmF1bHRBY3Rpb25zXTsKKyAgICAgICAgfSBlbHNlIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnByZXZpZXdWaWV3Q29udHJvbGxlckZvclVSTDpk
ZWZhdWx0QWN0aW9uczplbGVtZW50SW5mbzopXSkKKyAgICAgICAgICAgIHByZXZpZXdWaWV3Q29u
dHJvbGxlciA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IHByZXZpZXdWaWV3Q29udHJv
bGxlckZvclVSTDp1cmwgZGVmYXVsdEFjdGlvbnM6ZGVmYXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50
LmdldCgpIGVsZW1lbnRJbmZvOmVsZW1lbnRJbmZvLmdldCgpXTsKKyAgICAgICAgZWxzZSBpZiAo
W3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpwcmV2aWV3
Vmlld0NvbnRyb2xsZXJGb3JVUkw6KV0pCisgICAgICAgICAgICBwcmV2aWV3Vmlld0NvbnRyb2xs
ZXIgPSBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBwcmV2aWV3Vmlld0NvbnRyb2xsZXJG
b3JVUkw6dXJsXTsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisK
KyNpZiBVU0UoREFUQV9ERVRFQ1RPUlNfRk9SX0RFRkFVTFRfUFJFVklFVykKKyAgICAgICAgLy8g
UHJldmlvdXNseSwgVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgd291bGQgZGV0ZWN0IHRoZSBjYXNl
IHdoZXJlIHRoZXJlIHdhcyBubyBwcmV2aWV3Vmlld0NvbnRyb2xsZXIKKyAgICAgICAgLy8gYW5k
IGNyZWF0ZSBvbmUuIFdlIG5lZWQgdG8gcmVwbGljYXRlIHRoaXMgY29kZSBmb3IgdGhlIG5ldyBB
UEkuCisgICAgICAgIGlmICghcHJldmlld1ZpZXdDb250cm9sbGVyKSB7CisgICAgICAgICAgICBh
dXRvIGRkQ29udGV4dE1lbnVBY3Rpb25DbGFzcyA9IGdldEREQ29udGV4dE1lbnVBY3Rpb25DbGFz
cygpOworICAgICAgICAgICAgaWYgKFtkZENvbnRleHRNZW51QWN0aW9uQ2xhc3MgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JVUkw6aWRlbnRp
ZmllcjpzZWxlY3RlZFRleHQ6cmVzdWx0czppblZpZXc6Y29udGV4dDptZW51SWRlbnRpZmllcjop
XSkgeworICAgICAgICAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAg
ICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmNvbnRleHQgPSBbc2VsZiBkYXRhRGV0ZWN0aW9uQ29u
dGV4dEZvclBvc2l0aW9uSW5mb3JtYXRpb246X3Bvc2l0aW9uSW5mb3JtYXRpb25dOworICAgICAg
ICAgICAgICAgIFJldGFpblB0cjxVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbj4gZGF0YURldGVj
dG9yc1Jlc3VsdCA9IFtkZENvbnRleHRNZW51QWN0aW9uQ2xhc3MgY29udGV4dE1lbnVDb25maWd1
cmF0aW9uRm9yVVJMOnVybCBpZGVudGlmaWVyOl9wb3NpdGlvbkluZm9ybWF0aW9uLmRhdGFEZXRl
Y3RvcklkZW50aWZpZXIgc2VsZWN0ZWRUZXh0OnNlbGYuc2VsZWN0ZWRUZXh0IHJlc3VsdHM6X3Bv
c2l0aW9uSW5mb3JtYXRpb24uZGF0YURldGVjdG9yUmVzdWx0cy5nZXQoKSBpblZpZXc6c2VsZiBj
b250ZXh0OmNvbnRleHQgbWVudUlkZW50aWZpZXI6bmlsXTsKKyAgICAgICAgICAgICAgICBpZiAo
X3Nob3dMaW5rUHJldmlld3MgJiYgZGF0YURldGVjdG9yc1Jlc3VsdCAmJiBkYXRhRGV0ZWN0b3Jz
UmVzdWx0LmdldCgpLnByZXZpZXdQcm92aWRlcikKKyAgICAgICAgICAgICAgICAgICAgX2NvbnRl
eHRNZW51TGVnYWN5UHJldmlld0NvbnRyb2xsZXIgPSBkYXRhRGV0ZWN0b3JzUmVzdWx0LmdldCgp
LnByZXZpZXdQcm92aWRlcigpOworICAgICAgICAgICAgICAgIGlmIChkYXRhRGV0ZWN0b3JzUmVz
dWx0ICYmIGRhdGFEZXRlY3RvcnNSZXN1bHQuZ2V0KCkuYWN0aW9uUHJvdmlkZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byBtZW51RWxlbWVudHMgPSBtZW51RWxlbWVudHNGcm9tUHJldmll
d09yRGVmYXVsdHMobmlsLCBkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQsIGVsZW1lbnRJbmZv
KTsKKyAgICAgICAgICAgICAgICAgICAgX2NvbnRleHRNZW51TGVnYWN5TWVudSA9IGRhdGFEZXRl
Y3RvcnNSZXN1bHQuZ2V0KCkuYWN0aW9uUHJvdmlkZXIobWVudUVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAg
ICAgICAgYXV0byBtZW51VGl0bGUgPSB0aXRsZUZvck1lbnUodHJ1ZSwgX3Nob3dMaW5rUHJldmll
d3MsIHVybCwgX3Bvc2l0aW9uSW5mb3JtYXRpb24udGl0bGUpOworICAgICAgICBfY29udGV4dE1l
bnVMZWdhY3lNZW51ID0gbWVudUZyb21QcmV2aWV3T3JEZWZhdWx0cyhwcmV2aWV3Vmlld0NvbnRy
b2xsZXIsIGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudCwgZWxlbWVudEluZm8sIG1lbnVUaXRs
ZSk7CisKKyAgICB9IGVsc2UgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmlzSW1hZ2UpIHsKKyAg
ICAgICAgTlNVUkwgKm5zVVJMID0gKE5TVVJMICopdXJsOworICAgICAgICBSZXRhaW5QdHI8TlNE
aWN0aW9uYXJ5PiBpbWFnZUluZm87CisgICAgICAgIEFTU0VSVChfcG9zaXRpb25JbmZvcm1hdGlv
bi5pbWFnZSk7CisgICAgICAgIGF1dG8gY2dJbWFnZSA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLmlt
YWdlLT5tYWtlQ0dJbWFnZUNvcHkoKTsKKyAgICAgICAgYXV0byB1aUltYWdlID0gYWRvcHROUyhb
W1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpjZ0ltYWdlLmdldCgpXSk7CisKKyAgICAg
ICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6
YWx0ZXJuYXRlVVJMRnJvbUltYWdlOnVzZXJJbmZvOildKSB7CisgICAgICAgICAgICBOU0RpY3Rp
b25hcnkgKnVzZXJJbmZvOworICAgICAgICAgICAgbnNVUkwgPSBbdWlEZWxlZ2F0ZSBfd2ViVmll
dzpfd2ViVmlldyBhbHRlcm5hdGVVUkxGcm9tSW1hZ2U6dWlJbWFnZS5nZXQoKSB1c2VySW5mbzom
dXNlckluZm9dOworICAgICAgICAgICAgaW1hZ2VJbmZvID0gdXNlckluZm87CisgICAgICAgIH0K
KworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBp
ZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzp3aWxs
UHJldmlld0ltYWdlV2l0aFVSTDopXSkKKyAgICAgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3
Ol93ZWJWaWV3IHdpbGxQcmV2aWV3SW1hZ2VXaXRoVVJMOl9wb3NpdGlvbkluZm9ybWF0aW9uLmlt
YWdlVVJMXTsKKworICAgICAgICBSZXRhaW5QdHI8TlNBcnJheTxfV0tFbGVtZW50QWN0aW9uICo+
PiBkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQgPSBbX2FjdGlvblNoZWV0QXNzaXN0YW50IGRl
ZmF1bHRBY3Rpb25zRm9ySW1hZ2VTaGVldDplbGVtZW50SW5mby5nZXQoKV07CisKKyAgICAgICAg
aWYgKGltYWdlSW5mbyAmJiBbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KF93ZWJWaWV3OnByZXZpZXdWaWV3Q29udHJvbGxlckZvckltYWdlOmFsdGVybmF0ZVVSTDpkZWZh
dWx0QWN0aW9uczplbGVtZW50SW5mbzopXSkKKyAgICAgICAgICAgIHByZXZpZXdWaWV3Q29udHJv
bGxlciA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IHByZXZpZXdWaWV3Q29udHJvbGxl
ckZvckltYWdlOnVpSW1hZ2UuZ2V0KCkgYWx0ZXJuYXRlVVJMOm5zVVJMIGRlZmF1bHRBY3Rpb25z
OmRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudC5nZXQoKSBlbGVtZW50SW5mbzplbGVtZW50SW5m
by5nZXQoKV07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByZXZpZXdWaWV3Q29udHJvbGxl
ciA9IFtbV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhDR0ltYWdl
OmNnSW1hZ2UgZGVmYXVsdEFjdGlvbnM6ZGVmYXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50LmdldCgp
IGVsZW1lbnRJbmZvOmVsZW1lbnRJbmZvLmdldCgpXTsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECisKKyAgICAgICAgYXV0byBtZW51VGl0bGUgPSB0aXRsZUZvck1l
bnUoZmFsc2UsIF9zaG93TGlua1ByZXZpZXdzLCB1cmwsIF9wb3NpdGlvbkluZm9ybWF0aW9uLnRp
dGxlKTsKKyAgICAgICAgX2NvbnRleHRNZW51TGVnYWN5TWVudSA9IG1lbnVGcm9tUHJldmlld09y
RGVmYXVsdHMocHJldmlld1ZpZXdDb250cm9sbGVyLCBkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3Rh
bnQsIGVsZW1lbnRJbmZvLCBtZW51VGl0bGUpOworICAgIH0KKworICAgIF9jb250ZXh0TWVudUxl
Z2FjeVByZXZpZXdDb250cm9sbGVyID0gX3Nob3dMaW5rUHJldmlld3MgPyBwcmV2aWV3Vmlld0Nv
bnRyb2xsZXIgOiBudWxscHRyOworfQorCistIChVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiAq
KWNvbnRleHRNZW51SW50ZXJhY3Rpb246KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWludGVy
YWN0aW9uIGNvbmZpZ3VyYXRpb25Gb3JNZW51QXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbgor
eworICAgIC8vIFJlcXVpcmVkIHRvIGNvbmZvcm0gdG8gVUlDb250ZXh0TWVudUludGVyYWN0aW9u
RGVsZWdhdGUsIGJ1dCBTUEkgdmVyc2lvbiBzaG91bGQgYmUgY2FsbGVkIGluc3RlYWQuCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClfY29u
dGV4dE1lbnVJbnRlcmFjdGlvbjooVUlDb250ZXh0TWVudUludGVyYWN0aW9uICopaW50ZXJhY3Rp
b24gY29uZmlndXJhdGlvbkZvck1lbnVBdExvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uIGNvbXBs
ZXRpb246KHZvaWQoXikoVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKikpY29tcGxldGlvbgor
eworICAgIGlmICghX3dlYlZpZXcpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisK
KyAgICBpZiAoIV93ZWJWaWV3LmNvbmZpZ3VyYXRpb24uX2xvbmdQcmVzc0FjdGlvbnNFbmFibGVk
KQorICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworCisgICAgY29uc3QgYXV0byBwb3Np
dGlvbiA9IFtpbnRlcmFjdGlvbiBsb2NhdGlvbkluVmlldzpzZWxmXTsKKyAgICBXZWJLaXQ6Oklu
dGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0IHJlcXVlc3QgeyBXZWJDb3JlOjpyb3VuZGVkSW50
UG9pbnQocG9zaXRpb24pIH07CisgICAgcmVxdWVzdC5pbmNsdWRlU25hcHNob3QgPSB0cnVlOwor
ICAgIHJlcXVlc3QuaW5jbHVkZUxpbmtJbmRpY2F0b3IgPSB0cnVlOworCisgICAgW3NlbGYgZG9B
ZnRlclBvc2l0aW9uSW5mb3JtYXRpb25VcGRhdGU6W3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tD
b250ZW50Vmlldz4oc2VsZiksIGNvbXBsZXRpb24gPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbild
IChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uKSB7CisgICAgICAgIGF1
dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICBpZiAoIXN0cm9uZ1NlbGYp
CisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworICAgICAgICBbc3Ryb25nU2Vs
ZiBjb250aW51ZUNvbnRleHRNZW51SW50ZXJhY3Rpb246Y29tcGxldGlvbi5nZXQoKV07CisgICAg
fSBmb3JSZXF1ZXN0OnJlcXVlc3RdOworfQorCistICh2b2lkKWNvbnRpbnVlQ29udGV4dE1lbnVJ
bnRlcmFjdGlvbjoodm9pZCheKShVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiAqKSljb21wbGV0
aW9uCit7CisgICAgaWYgKCFfcG9zaXRpb25JbmZvcm1hdGlvbi50b3VjaENhbGxvdXRFbmFibGVk
KQorICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworCisgICAgaWYgKCFfcG9zaXRpb25J
bmZvcm1hdGlvbi5pc0xpbmsgJiYgIV9wb3NpdGlvbkluZm9ybWF0aW9uLmlzSW1hZ2UgJiYgIV9w
b3NpdGlvbkluZm9ybWF0aW9uLmlzQXR0YWNobWVudCkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b24obmlsKTsKKworICAgIFVSTCBsaW5rVVJMID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24udXJsOwor
CisgICAgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmlzTGluayAmJiBsaW5rVVJMLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24obmlsKTsKKworICAgIGF1dG8gdWlEZWxlZ2F0
ZSA9IHN0YXRpY19jYXN0PGlkPFdLVUlEZWxlZ2F0ZVByaXZhdGU+Pihfd2ViVmlldy5VSURlbGVn
YXRlKTsKKyAgICBpZiAoIXVpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uKG5p
bCk7CisKKyAgICBpZiAobmVlZHNEZXByZWNhdGVkUHJldmlld0FQSSh1aURlbGVnYXRlKSkgewor
CisgICAgICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0xpbmspIHsKKyAgICAgICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgICAgICBpZiAoW3Vp
RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnNob3VsZFByZXZp
ZXdFbGVtZW50OildKSB7CisgICAgICAgICAgICAgICAgYXV0byBwcmV2aWV3RWxlbWVudEluZm8g
PSBhZG9wdE5TKFtbV0tQcmV2aWV3RWxlbWVudEluZm8gYWxsb2NdIF9pbml0V2l0aExpbmtVUkw6
bGlua1VSTF0pOworICAgICAgICAgICAgICAgIGlmICghW3VpRGVsZWdhdGUgd2ViVmlldzpfd2Vi
VmlldyBzaG91bGRQcmV2aWV3RWxlbWVudDpwcmV2aWV3RWxlbWVudEluZm8uZ2V0KCldKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IEphdmFTY3JpcHQgdXJscyBoZXJlLiBCdXQgbWFrZSBzdXJl
IHRoZXkgZG9uJ3Qgc2hvdyBhIHByZXZpZXcuCisgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2Js
ZW0vNTA1NzIyODM+CisgICAgICAgICAgICBpZiAoIWxpbmtVUkwucHJvdG9jb2xJc0luSFRUUEZh
bWlseSgpKSB7CisjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQorICAgICAgICAgICAgICAgIGlm
ICghV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6Y2FuQmVQcmVzZW50ZWRCeURhdGFEZXRlY3RvcnMo
bGlua1VSTCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIF9jb250ZXh0TWVudUxl
Z2FjeVByZXZpZXdDb250cm9sbGVyID0gbnVsbHB0cjsKKyAgICAgICAgX2NvbnRleHRNZW51TGVn
YWN5TWVudSA9IG51bGxwdHI7CisgICAgICAgIF9jb250ZXh0TWVudUhhc1JlcXVlc3RlZExlZ2Fj
eURhdGEgPSBOTzsKKworICAgICAgICBVSUNvbnRleHRNZW51QWN0aW9uUHJvdmlkZXIgYWN0aW9u
TWVudVByb3ZpZGVyID0gW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tDb250ZW50Vmlldz4oc2Vs
ZildIChOU0FycmF5PFVJTWVudUVsZW1lbnQgKj4gKnN1Z2dlc3RlZEFjdGlvbnMpIC0+IFVJTWVu
dSAqIHsKKyAgICAgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAg
ICAgICAgICAgaWYgKCFzdHJvbmdTZWxmKQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgICAgICAgICBpZiAoIXN0cm9uZ1NlbGYtPl9jb250ZXh0TWVudUhhc1JlcXVlc3RlZExlZ2Fj
eURhdGEpCisgICAgICAgICAgICAgICAgW3N0cm9uZ1NlbGYgYXNzaWduTGVnYWN5RGF0YUZvckNv
bnRleHRNZW51SW50ZXJhY3Rpb25dOworCisgICAgICAgICAgICByZXR1cm4gc3Ryb25nU2VsZi0+
X2NvbnRleHRNZW51TGVnYWN5TWVudS5nZXQoKTsKKyAgICAgICAgfTsKKworICAgICAgICBVSUNv
bnRleHRNZW51Q29udGVudFByZXZpZXdQcm92aWRlciBjb250ZW50UHJldmlld1Byb3ZpZGVyID0g
W3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tDb250ZW50Vmlldz4oc2VsZildICgpIC0+IFVJVmll
d0NvbnRyb2xsZXIgKiB7CisgICAgICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5n
ZXQoKTsKKyAgICAgICAgICAgIGlmICghc3Ryb25nU2VsZikKKyAgICAgICAgICAgICAgICByZXR1
cm4gbmlsOworICAgICAgICAgICAgaWYgKCFzdHJvbmdTZWxmLT5fY29udGV4dE1lbnVIYXNSZXF1
ZXN0ZWRMZWdhY3lEYXRhKQorICAgICAgICAgICAgICAgIFtzdHJvbmdTZWxmIGFzc2lnbkxlZ2Fj
eURhdGFGb3JDb250ZXh0TWVudUludGVyYWN0aW9uXTsKKworICAgICAgICAgICAgcmV0dXJuIHN0
cm9uZ1NlbGYtPl9jb250ZXh0TWVudUxlZ2FjeVByZXZpZXdDb250cm9sbGVyLmdldCgpOworICAg
ICAgICB9OworCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgcHJvdmlkZSBhbiBpZGVudGlm
aWVyIGFuZCBBU1NFUlQgaW4gZGVsZWdhdGVzIGlmIHdlIGRvbid0IG1hdGNoPworICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbihbVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
bldpdGhJZGVudGlmaWVyOm5pbCBwcmV2aWV3UHJvdmlkZXI6Y29udGVudFByZXZpZXdQcm92aWRl
ciBhY3Rpb25Qcm92aWRlcjphY3Rpb25NZW51UHJvdmlkZXJdKTsKKyAgICB9CisKKyAgICBhdXRv
IGNvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihbY29tcGxldGlvbiA9IG1ha2VCbG9ja1B0
cihjb21wbGV0aW9uKSwgbGlua1VSTCA9IFdURk1vdmUobGlua1VSTCksIHdlYWtTZWxmID0gV2Vh
a09iakNQdHI8V0tDb250ZW50Vmlldz4oc2VsZildIChVSUNvbnRleHRNZW51Q29uZmlndXJhdGlv
biAqY29uZmlndXJhdGlvbkZyb21XS1VJRGVsZWdhdGUpIG11dGFibGUgeworCisgICAgICAgIGF1
dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICBpZiAoIXN0cm9uZ1NlbGYp
CisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworCisgICAgICAgIGlmICghY29u
ZmlndXJhdGlvbkZyb21XS1VJRGVsZWdhdGUpIHsKKworICAgICAgICAgICAgc3Ryb25nU2VsZi0+
X2NvbnRleHRNZW51RWxlbWVudEluZm8gPSBuaWw7CisKKyAgICAgICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQgd2UgaGF2ZSBhbiBvYmplY3Qgd2UgbWlnaHQgd2FudCB0byBzaG93IGEgY29udGV4dCBt
ZW51IGZvciwgYnV0IHRoZQorICAgICAgICAgICAgLy8gY2xpZW50IHdhcyB1bmFibGUgdG8gaGFu
ZGxlIGl0LiBCZWZvcmUgZ2l2aW5nIHVwLCB3ZSBhc2sgRGF0YURldGVjdG9ycy4KKworI2lmIEVO
QUJMRShEQVRBX0RFVEVDVElPTikKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IEphdmFT
Y3JpcHQgdXJscyBoZXJlLiBCdXQgbWFrZSBzdXJlIHRoZXkgZG9uJ3Qgc2hvdyBhIHByZXZpZXcu
CisgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTA1NzIyODM+CisgICAgICAgICAgICBp
ZiAoIWxpbmtVUkwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpICYmICFXZWJDb3JlOjpEYXRhRGV0
ZWN0aW9uOjpjYW5CZVByZXNlbnRlZEJ5RGF0YURldGVjdG9ycyhsaW5rVVJMKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworCisgICAgICAgICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisgICAgICAgICAgICBhdXRvIGRkQ29udGV4dE1lbnVBY3Rpb25D
bGFzcyA9IGdldEREQ29udGV4dE1lbnVBY3Rpb25DbGFzcygpOworICAgICAgICAgICAgaWYgKFtk
ZENvbnRleHRNZW51QWN0aW9uQ2xhc3MgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb250
ZXh0TWVudUNvbmZpZ3VyYXRpb25XaXRoVVJMOmluVmlldzpjb250ZXh0Om1lbnVJZGVudGlmaWVy
OildKSB7CisgICAgICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICpjb250ZXh0ID0gW3N0cm9uZ1Nl
bGYgZGF0YURldGVjdGlvbkNvbnRleHRGb3JQb3NpdGlvbkluZm9ybWF0aW9uOnN0cm9uZ1NlbGYt
Pl9wb3NpdGlvbkluZm9ybWF0aW9uXTsKKyAgICAgICAgICAgICAgICBVSUNvbnRleHRNZW51Q29u
ZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbkZyb21ERCA9IFtkZENvbnRleHRNZW51QWN0aW9uQ2xh
c3MgY29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yVVJMOmxpbmtVUkwgaWRlbnRpZmllcjpzdHJv
bmdTZWxmLT5fcG9zaXRpb25JbmZvcm1hdGlvbi5kYXRhRGV0ZWN0b3JJZGVudGlmaWVyIHNlbGVj
dGVkVGV4dDpbc3Ryb25nU2VsZiBzZWxlY3RlZFRleHRdIHJlc3VsdHM6c3Ryb25nU2VsZi0+X3Bv
c2l0aW9uSW5mb3JtYXRpb24uZGF0YURldGVjdG9yUmVzdWx0cy5nZXQoKSBpblZpZXc6c3Ryb25n
U2VsZi5nZXQoKSBjb250ZXh0OmNvbnRleHQgbWVudUlkZW50aWZpZXI6bmlsXTsKKyAgICAgICAg
ICAgICAgICBpZiAoc3Ryb25nU2VsZi0+X3Nob3dMaW5rUHJldmlld3MpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uKGNvbmZpZ3VyYXRpb25Gcm9tREQpOworICAgICAgICAg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uKFtVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uV2l0aElkZW50aWZpZXI6W2NvbmZpZ3VyYXRpb25Gcm9tREQgaWRlbnRpZmllcl0g
cHJldmlld1Byb3ZpZGVyOltjb25maWd1cmF0aW9uRnJvbUREIHByZXZpZXdQcm92aWRlcl0gYWN0
aW9uUHJvdmlkZXI6W2NvbmZpZ3VyYXRpb25Gcm9tREQgYWN0aW9uUHJvdmlkZXJdXSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworI2VuZGlm
CisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworICAgICAgICB9CisKKyAgICAg
ICAgaWQ8TlNDb3B5aW5nPiBpZGVudGlmaWVyID0gW2NvbmZpZ3VyYXRpb25Gcm9tV0tVSURlbGVn
YXRlIGlkZW50aWZpZXJdOworICAgICAgICBVSUNvbnRleHRNZW51Q29udGVudFByZXZpZXdQcm92
aWRlciBjb250ZW50UHJldmlld1Byb3ZpZGVyID0gW2NvbmZpZ3VyYXRpb25Gcm9tV0tVSURlbGVn
YXRlIHByZXZpZXdQcm92aWRlcl07CisgICAgICAgIFVJQ29udGV4dE1lbnVBY3Rpb25Qcm92aWRl
ciBhY3Rpb25NZW51UHJvdmlkZXIgPSBbY29uZmlndXJhdGlvbkZyb21XS1VJRGVsZWdhdGUgYWN0
aW9uUHJvdmlkZXJdOworCisgICAgICAgIGF1dG8gYWN0aW9uUHJvdmlkZXJXcmFwcGVyID0gW2Fj
dGlvblByb3ZpZGVyRnJvbVVJRGVsZWdhdGUgPSBtYWtlQmxvY2tQdHIoYWN0aW9uTWVudVByb3Zp
ZGVyKSwgd2Vha1NlbGYgPSBXVEZNb3ZlKHdlYWtTZWxmKV0gKE5TQXJyYXk8VUlNZW51RWxlbWVu
dCAqPiAqc3VnZ2VzdGVkQWN0aW9ucykgLT4gVUlNZW51ICogeworICAgICAgICAgICAgYXV0byBz
dHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXN0cm9uZ1NlbGYp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICAgICAgYXV0byBlbGVtZW50
SW5mbyA9IGFkb3B0TlMoW1tfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyBhbGxvY10gX2luaXRXaXRo
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb246c3Ryb25nU2VsZi0+X3Bvc2l0aW9uSW5m
b3JtYXRpb25dKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU0FycmF5PF9XS0VsZW1lbnRBY3Rp
b24gKj4+IGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudCA9IHN0cm9uZ1NlbGYtPl9wb3NpdGlv
bkluZm9ybWF0aW9uLmlzTGluayA/IFtzdHJvbmdTZWxmLT5fYWN0aW9uU2hlZXRBc3Npc3RhbnQg
ZGVmYXVsdEFjdGlvbnNGb3JMaW5rU2hlZXQ6ZWxlbWVudEluZm8uZ2V0KCldIDogW3N0cm9uZ1Nl
bGYtPl9hY3Rpb25TaGVldEFzc2lzdGFudCBkZWZhdWx0QWN0aW9uc0ZvckltYWdlU2hlZXQ6ZWxl
bWVudEluZm8uZ2V0KCldOworCisgICAgICAgICAgICBhdXRvIG1lbnVFbGVtZW50cyA9IG1lbnVF
bGVtZW50c0Zyb21QcmV2aWV3T3JEZWZhdWx0cyhuaWwsIGRlZmF1bHRBY3Rpb25zRnJvbUFzc2lz
dGFudCwgZWxlbWVudEluZm8pOworCisgICAgICAgICAgICBpZiAoYWN0aW9uUHJvdmlkZXJGcm9t
VUlEZWxlZ2F0ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uUHJvdmlkZXJGcm9tVUlE
ZWxlZ2F0ZShtZW51RWxlbWVudHMpOworCisgICAgICAgICAgICBhdXRvIHRpdGxlID0gdGl0bGVG
b3JNZW51KHN0cm9uZ1NlbGYtPl9wb3NpdGlvbkluZm9ybWF0aW9uLmlzTGluaywgc3Ryb25nU2Vs
Zi0+X3Nob3dMaW5rUHJldmlld3MsIHN0cm9uZ1NlbGYtPl9wb3NpdGlvbkluZm9ybWF0aW9uLnVy
bCwgc3Ryb25nU2VsZi0+X3Bvc2l0aW9uSW5mb3JtYXRpb24udGl0bGUpOworICAgICAgICAgICAg
cmV0dXJuIFtVSU1lbnUgbWVudVdpdGhUaXRsZTp0aXRsZSBjaGlsZHJlbjptZW51RWxlbWVudHNd
OworICAgICAgICB9OworCisgICAgICAgIGNvbXBsZXRpb24oW1VJQ29udGV4dE1lbnVDb25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb25XaXRoSWRlbnRpZmllcjppZGVudGlmaWVyIHByZXZpZXdQcm92
aWRlcjpjb250ZW50UHJldmlld1Byb3ZpZGVyIGFjdGlvblByb3ZpZGVyOmFjdGlvblByb3ZpZGVy
V3JhcHBlcl0pOworICAgIH0pOworCisgICAgX2NvbnRleHRNZW51RWxlbWVudEluZm8gPSB3cmFw
cGVyKEFQSTo6Q29udGV4dE1lbnVFbGVtZW50SW5mbzo6Y3JlYXRlKF9wb3NpdGlvbkluZm9ybWF0
aW9uKSk7CisgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3dlYlZpZXc6Y29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yRWxlbWVudDpjb21wbGV0aW9uSGFu
ZGxlcjopXSkgeworICAgICAgICBhdXRvIGNoZWNrZXIgPSBXZWJLaXQ6OkNvbXBsZXRpb25IYW5k
bGVyQ2FsbENoZWNrZXI6OmNyZWF0ZSh1aURlbGVnYXRlLCBAc2VsZWN0b3IoX3dlYlZpZXc6Y29u
dGV4dE1lbnVDb25maWd1cmF0aW9uRm9yRWxlbWVudDpjb21wbGV0aW9uSGFuZGxlcjopKTsKKyAg
ICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgY29udGV4dE1lbnVDb25maWd1cmF0
aW9uRm9yRWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKSBjb21wbGV0aW9uSGFu
ZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25CbG9jayA9IFdURk1vdmUoY29tcGxldGlvbkJs
b2NrKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChVSUNvbnRleHRNZW51Q29uZmlndXJh
dGlvbiAqY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRp
b25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAg
Y29tcGxldGlvbkJsb2NrKGNvbmZpZ3VyYXRpb24pOworICAgICAgICB9KS5nZXQoKV07CisgICAg
fSBlbHNlIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0xpbmsgJiYgW3VpRGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51Q29uZmlndXJhdGlv
bkZvckVsZW1lbnQ6Y29tcGxldGlvbkhhbmRsZXI6KV0pIHsKKyAgICAgICAgYXV0byBjaGVja2Vy
ID0gV2ViS2l0OjpDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUodWlEZWxlZ2F0
ZSwgQHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yRWxlbWVudDpj
b21wbGV0aW9uSGFuZGxlcjopKTsKKyAgICAgICAgW3VpRGVsZWdhdGUgd2ViVmlldzpfd2ViVmll
dyBjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVtZW50Ol9jb250ZXh0TWVudUVsZW1lbnRJ
bmZvLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkJsb2Nr
ID0gV1RGTW92ZShjb21wbGV0aW9uQmxvY2spLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0g
KFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uKSB7CisgICAgICAgICAg
ICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgICAgICAgICBjb21wbGV0aW9uQmxvY2soY29uZmlndXJhdGlvbik7Cisg
ICAgICAgIH0pLmdldCgpXTsKKyAgICB9IGVsc2UKKyAgICAgICAgY29tcGxldGlvbkJsb2NrKG5p
bCk7CiB9CiAKK3N0YXRpYyBSZXRhaW5QdHI8VUlJbWFnZT4gdWlJbWFnZUZvckltYWdlKFdlYkNv
cmU6OkltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgYXV0byBjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCk7CisgICAgaWYgKCFj
Z0ltYWdlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIGFkb3B0TlMoW1tVSUlt
YWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6Y2dJbWFnZS5nZXQoKV0pOworfQorCisvLyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgbWVyZ2VkIHdpdGggY3JlYXRlVGFyZ2V0ZWREcmFnUHJldmlldyBp
biBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuCitzdGF0aWMgUmV0YWluUHRyPFVJVGFyZ2V0ZWRQ
cmV2aWV3PiBjcmVhdGVUYXJnZXRlZFByZXZpZXcoVUlJbWFnZSAqaW1hZ2UsIFVJVmlldyAqcm9v
dFZpZXcsIFVJVmlldyAqcHJldmlld0NvbnRhaW5lciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0
UmVjdD4mIGNsaXBwaW5nUmVjdHNJbkZyYW1lQ29vcmRpbmF0ZXMsIFVJQ29sb3IgKmJhY2tncm91
bmRDb2xvcikKK3sKKyAgICBpZiAoZnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMuaXNFbXB0eSgp
IHx8ICFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMgPSBbcm9vdFZpZXcgY29udmVydFJlY3Q6ZnJh
bWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMgdG9WaWV3OnByZXZpZXdDb250YWluZXJdOworICAgIGlm
IChmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHNjYWxpbmdSYXRpbyA9IGZyYW1lSW5Db250
YWluZXJDb29yZGluYXRlcy5zaXplKCkgLyBmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlcy5zaXpl
KCk7CisgICAgTlNNdXRhYmxlQXJyYXkgKmNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGlu
YXRlcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjbGlwcGluZ1JlY3RzSW5G
cmFtZUNvb3JkaW5hdGVzLnNpemUoKV07CisKKyAgICBmb3IgKGF1dG8gcmVjdCA6IGNsaXBwaW5n
UmVjdHNJbkZyYW1lQ29vcmRpbmF0ZXMpIHsKKyAgICAgICAgcmVjdC5zY2FsZShzY2FsaW5nUmF0
aW8pOworICAgICAgICBbY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzIGFkZE9i
amVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6cmVjdF1dOworICAgIH0KKworICAgIFJldGFp
blB0cjxVSVByZXZpZXdQYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzOworICAgIGlmIChjbGlwcGluZ1Jl
Y3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMuY291bnQpCisgICAgICAgIHBhcmFtZXRlcnMgPSBh
ZG9wdE5TKFtbVUlQcmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhUZXh0TGluZVJlY3Rz
OmNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlc10pOworICAgIGVsc2UKKyAgICAg
ICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSVByZXZpZXdQYXJhbWV0ZXJzIGFsbG9jXSBpbml0
XSk7CisKKyAgICBpZiAoYmFja2dyb3VuZENvbG9yKQorICAgICAgICBbcGFyYW1ldGVycyBzZXRC
YWNrZ3JvdW5kQ29sb3I6YmFja2dyb3VuZENvbG9yXTsKKworICAgIENHUG9pbnQgY2VudGVySW5D
b250YWluZXJDb29yZGluYXRlcyA9IHsgQ0dSZWN0R2V0TWlkWChmcmFtZUluQ29udGFpbmVyQ29v
cmRpbmF0ZXMpLCBDR1JlY3RHZXRNaWRZKGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcykgfTsK
KyAgICBhdXRvIHRhcmdldCA9IGFkb3B0TlMoW1tVSVByZXZpZXdUYXJnZXQgYWxsb2NdIGluaXRX
aXRoQ29udGFpbmVyOnByZXZpZXdDb250YWluZXIgY2VudGVyOmNlbnRlckluQ29udGFpbmVyQ29v
cmRpbmF0ZXNdKTsKKworICAgIGF1dG8gaW1hZ2VWaWV3ID0gYWRvcHROUyhbW1VJSW1hZ2VWaWV3
IGFsbG9jXSBpbml0V2l0aEltYWdlOmltYWdlXSk7CisgICAgW2ltYWdlVmlldyBzZXRGcmFtZTpm
cmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXNdOworICAgIHJldHVybiBhZG9wdE5TKFtbVUlUYXJn
ZXRlZFByZXZpZXcgYWxsb2NdIGluaXRXaXRoVmlldzppbWFnZVZpZXcuZ2V0KCkgcGFyYW1ldGVy
czpwYXJhbWV0ZXJzLmdldCgpIHRhcmdldDp0YXJnZXQuZ2V0KCldKTsKK30KKworLSAoVUlUYXJn
ZXRlZFByZXZpZXcgKilfdGFyZ2V0ZWRQcmV2aWV3Cit7CisgICAgaWYgKF9wb3NpdGlvbkluZm9y
bWF0aW9uLmlzTGluayAmJiBfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRl
bnRJbWFnZSkgeworICAgICAgICBbc2VsZiBfc3RhcnRTdXBwcmVzc2luZ1NlbGVjdGlvbkFzc2lz
dGFudEZvclJlYXNvbjpXZWJLaXQ6OkludGVyYWN0aW9uSXNIYXBwZW5pbmddOworCisgICAgICAg
IGF1dG8gaW5kaWNhdG9yID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvcjsKKyAg
ICAgICAgYXV0byB0ZXh0SW5kaWNhdG9ySW1hZ2UgPSB1aUltYWdlRm9ySW1hZ2UoaW5kaWNhdG9y
LmNvbnRlbnRJbWFnZS5nZXQoKSk7CisKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVRhcmdldGVkUHJl
dmlldyh0ZXh0SW5kaWNhdG9ySW1hZ2UuZ2V0KCksIHNlbGYsIHNlbGYudW5zY2FsZWRWaWV3LCBp
bmRpY2F0b3IudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcywgaW5kaWNhdG9y
LnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMsIFtVSUNvbG9yIGNvbG9yV2l0aENH
Q29sb3I6Y2FjaGVkQ0dDb2xvcihpbmRpY2F0b3IuZXN0aW1hdGVkQmFja2dyb3VuZENvbG9yKV0p
LmF1dG9yZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKChfcG9zaXRpb25JbmZvcm1hdGlvbi5p
c0F0dGFjaG1lbnQgfHwgX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNJbWFnZSkgJiYgX3Bvc2l0aW9u
SW5mb3JtYXRpb24uaW1hZ2UpIHsKKyAgICAgICAgW3NlbGYgX3N0YXJ0U3VwcHJlc3NpbmdTZWxl
Y3Rpb25Bc3Npc3RhbnRGb3JSZWFzb246V2ViS2l0OjpJbnRlcmFjdGlvbklzSGFwcGVuaW5nXTsK
KworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9IF9wb3NpdGlvbkluZm9y
bWF0aW9uLmltYWdlLT5tYWtlQ0dJbWFnZUNvcHkoKTsKKyAgICAgICAgYXV0byBpbWFnZSA9IGFk
b3B0TlMoW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6Y2dJbWFnZS5nZXQoKV0pOwor
CisgICAgICAgIHJldHVybiBjcmVhdGVUYXJnZXRlZFByZXZpZXcoaW1hZ2UuZ2V0KCksIHNlbGYs
IHNlbGYudW5zY2FsZWRWaWV3LCBfcG9zaXRpb25JbmZvcm1hdGlvbi5ib3VuZHMsIHsgfSwgbmls
KS5hdXRvcmVsZWFzZSgpOworICAgIH0KKworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKFVJVGFy
Z2V0ZWRQcmV2aWV3ICopY29udGV4dE1lbnVJbnRlcmFjdGlvbjooVUlDb250ZXh0TWVudUludGVy
YWN0aW9uICopaW50ZXJhY3Rpb24gcHJldmlld0ZvckhpZ2hsaWdodGluZ01lbnVXaXRoQ29uZmln
dXJhdGlvbjooVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uCit7Cisg
ICAgcmV0dXJuIFtzZWxmIF90YXJnZXRlZFByZXZpZXddOworfQorCistICh2b2lkKWNvbnRleHRN
ZW51SW50ZXJhY3Rpb25XaWxsUHJlc2VudDooVUlDb250ZXh0TWVudUludGVyYWN0aW9uICopaW50
ZXJhY3Rpb24KK3sKKyAgICBpZiAoIV93ZWJWaWV3KQorICAgICAgICByZXR1cm47CisgICAgYXV0
byB1aURlbGVnYXRlID0gc3RhdGljX2Nhc3Q8aWQ8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KF93ZWJW
aWV3LlVJRGVsZWdhdGUpOworICAgIGlmICghdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6
Y29udGV4dE1lbnVXaWxsUHJlc2VudEZvckVsZW1lbnQ6KV0pCisgICAgICAgIFt1aURlbGVnYXRl
IHdlYlZpZXc6X3dlYlZpZXcgY29udGV4dE1lbnVXaWxsUHJlc2VudEZvckVsZW1lbnQ6X2NvbnRl
eHRNZW51RWxlbWVudEluZm8uZ2V0KCldOworICAgIGVsc2UgaWYgKFt1aURlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVXaWxsUHJlc2VudEZv
ckVsZW1lbnQ6KV0pIHsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KKyAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgY29udGV4dE1lbnVXaWxs
UHJlc2VudEZvckVsZW1lbnQ6X2NvbnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCldOworICAgICAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAgICB9Cit9CisKKy0gKFVJVGFy
Z2V0ZWRQcmV2aWV3ICopY29udGV4dE1lbnVJbnRlcmFjdGlvbjooVUlDb250ZXh0TWVudUludGVy
YWN0aW9uICopaW50ZXJhY3Rpb24gcHJldmlld0ZvckRpc21pc3NpbmdNZW51V2l0aENvbmZpZ3Vy
YXRpb246KFVJQ29udGV4dE1lbnVDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbgoreworICAg
IHJldHVybiBbc2VsZiBfdGFyZ2V0ZWRQcmV2aWV3XTsKK30KKworLSAodm9pZCljb250ZXh0TWVu
dUludGVyYWN0aW9uOihVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiB3aWxs
Q29tbWl0V2l0aEFuaW1hdG9yOihpZDxVSUNvbnRleHRNZW51SW50ZXJhY3Rpb25Db21taXRBbmlt
YXRpbmc+KWFuaW1hdG9yCit7CisgICAgaWYgKCFfd2ViVmlldykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgW3NlbGYgX3N0b3BTdXBwcmVzc2luZ1NlbGVjdGlvbkFzc2lzdGFudEZvclJlYXNvbjpX
ZWJLaXQ6OkludGVyYWN0aW9uSXNIYXBwZW5pbmddOworCisgICAgYXV0byB1aURlbGVnYXRlID0g
c3RhdGljX2Nhc3Q8aWQ8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KF93ZWJWaWV3LlVJRGVsZWdhdGUp
OworICAgIGlmICghdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG5lZWRz
RGVwcmVjYXRlZFByZXZpZXdBUEkodWlEZWxlZ2F0ZSkpIHsKKworICAgICAgICBpZiAoX3Bvc2l0
aW9uSW5mb3JtYXRpb24uaXNJbWFnZSkgeworICAgICAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29tbWl0UHJldmlld2VkSW1hZ2VX
aXRoVVJMOildKSB7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgaW1hZ2VVUkwgPSBfcG9z
aXRpb25JbmZvcm1hdGlvbi5pbWFnZVVSTDsKKyAgICAgICAgICAgICAgICBpZiAoaW1hZ2VVUkwu
aXNFbXB0eSgpIHx8ICEoaW1hZ2VVUkwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IGltYWdl
VVJMLnByb3RvY29sSXMoImRhdGEiKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAg
ICAgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGNvbW1pdFByZXZpZXdlZElt
YWdlV2l0aFVSTDooTlNVUkwgKilpbWFnZVVSTF07CisgICAgICAgICAgICAgICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbW1pdFByZXZpZXdpbmdWaWV3Q29udHJvbGxlcjopXSkg
eworICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAg
ICAgICAgIGlmIChhdXRvIHZpZXdDb250cm9sbGVyID0gX2NvbnRleHRNZW51TGVnYWN5UHJldmll
d0NvbnRyb2xsZXIuZ2V0KCkpCisgICAgICAgICAgICAgICAgW3VpRGVsZWdhdGUgd2ViVmlldzpf
d2ViVmlldyBjb21taXRQcmV2aWV3aW5nVmlld0NvbnRyb2xsZXI6dmlld0NvbnRyb2xsZXJdOwor
ICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb21taXRQcmV2aWV3ZWRWaWV3Q29udHJvbGxl
cjopXSkgeworICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4K
KyAgICAgICAgICAgIGlmIChhdXRvIHZpZXdDb250cm9sbGVyID0gX2NvbnRleHRNZW51TGVnYWN5
UHJldmlld0NvbnRyb2xsZXIuZ2V0KCkpCisgICAgICAgICAgICAgICAgW3VpRGVsZWdhdGUgX3dl
YlZpZXc6X3dlYlZpZXcgY29tbWl0UHJldmlld2VkVmlld0NvbnRyb2xsZXI6dmlld0NvbnRyb2xs
ZXJdOworICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpj
b250ZXh0TWVudUZvckVsZW1lbnQ6d2lsbENvbW1pdFdpdGhBbmltYXRvcjopXSkKKyAgICAgICAg
W3VpRGVsZWdhdGUgd2ViVmlldzpfd2ViVmlldyBjb250ZXh0TWVudUZvckVsZW1lbnQ6X2NvbnRl
eHRNZW51RWxlbWVudEluZm8uZ2V0KCkgd2lsbENvbW1pdFdpdGhBbmltYXRvcjphbmltYXRvcl07
CisgICAgZWxzZSBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihf
d2ViVmlldzpjb250ZXh0TWVudUZvckVsZW1lbnQ6d2lsbENvbW1pdFdpdGhBbmltYXRvcjopXSkg
eworICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBjb250ZXh0TWVudUZvckVsZW1lbnQ6X2NvbnRl
eHRNZW51RWxlbWVudEluZm8uZ2V0KCkgd2lsbENvbW1pdFdpdGhBbmltYXRvcjphbmltYXRvcl07
CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgIH0KK30KKwor
LSAodm9pZCljb250ZXh0TWVudUludGVyYWN0aW9uRGlkRW5kOihVSUNvbnRleHRNZW51SW50ZXJh
Y3Rpb24gKilpbnRlcmFjdGlvbgoreworICAgIGlmICghX3dlYlZpZXcpCisgICAgICAgIHJldHVy
bjsKKworICAgIFtzZWxmIF9zdG9wU3VwcHJlc3NpbmdTZWxlY3Rpb25Bc3Npc3RhbnRGb3JSZWFz
b246V2ViS2l0OjpJbnRlcmFjdGlvbklzSGFwcGVuaW5nXTsKKworICAgIC8vIEZJWE1FOiBUaGlz
IGRlbGVnYXRlIGlzIGJlaW5nIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBieSBVSUtpdC4gPHJkYXI6
Ly9wcm9ibGVtLzUxNTUwMjkxPgorICAgIC8vIFRoaXMgY29uZGl0aW9uYWwgYXZvaWRzIHRoZSBX
S1VJRGVsZWdhdGUgYmVpbmcgY2FsbGVkIHR3aWNlIHRvby4KKyAgICBpZiAoIV9jb250ZXh0TWVu
dUVsZW1lbnRJbmZvKSB7CisgICAgICAgIGF1dG8gdWlEZWxlZ2F0ZSA9IHN0YXRpY19jYXN0PGlk
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+Pihfd2ViVmlldy5VSURlbGVnYXRlKTsKKyAgICAgICAgaWYg
KFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpjb250ZXh0
TWVudURpZEVuZEZvckVsZW1lbnQ6KV0pCisgICAgICAgICAgICBbdWlEZWxlZ2F0ZSB3ZWJWaWV3
Ol93ZWJWaWV3IGNvbnRleHRNZW51RGlkRW5kRm9yRWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50
SW5mby5nZXQoKV07CisgICAgICAgIGVsc2UgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVEaWRFbmRGb3JFbGVtZW50OildKSB7
CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgICAg
ICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgY29udGV4dE1lbnVEaWRFbmRGb3JF
bGVtZW50Ol9jb250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpXTsKKyAgICAgICAgICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgICAgICB9CisgICAgfQorCisgICAgX2Nv
bnRleHRNZW51TGVnYWN5UHJldmlld0NvbnRyb2xsZXIgPSBudWxscHRyOworICAgIF9jb250ZXh0
TWVudUxlZ2FjeU1lbnUgPSBudWxscHRyOworICAgIF9jb250ZXh0TWVudUhhc1JlcXVlc3RlZExl
Z2FjeURhdGEgPSBOTzsKKyAgICBfY29udGV4dE1lbnVFbGVtZW50SW5mbyA9IG51bGxwdHI7Cit9
CisKK0BlbmQKKworI2Vsc2UKKworQGltcGxlbWVudGF0aW9uIFdLQ29udGVudFZpZXcgKFdLSW50
ZXJhY3Rpb25QcmV2aWV3KQorCiAtICh2b2lkKV9yZWdpc3RlclByZXZpZXcKIHsKICAgICBpZiAo
IV93ZWJWaWV3LmFsbG93c0xpbmtQcmV2aWV3KQpAQCAtNzc2Niw3ICs4MzM3LDcgQEAgc3RhdGlj
IE5TU3RyaW5nICpwcmV2aWV3SWRlbnRpZmllckZvckVsZW1lbnRBY3Rpb24oX1dLRWxlbWVudEFj
dGlvbiAqYWN0aW9uKQogCiBAZW5kCiAKLSNlbmRpZiAvLyBVU0UoTE9OR19QUkVTU19GT1JfTElO
S19QUkVWSUVXKQorI2VuZGlmIC8vIFVTRShVSUNPTlRFWFRNRU5VKQogCiAjZW5kaWYgLy8gSEFW
RShMSU5LX1BSRVZJRVcpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372446</attachid>
            <date>2019-06-19 02:17:20 -0700</date>
            <delta_ts>2019-06-19 02:17:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198986-20190619191718.patch</filename>
            <type>text/plain</type>
            <size>44857</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0OTM1YzQ1YzhmZmI4MzFhZjJkYjBk
MDkyNGRkMzcxZDM3NDE1M2UuLmYxMDc4MmMyNzhlODBlNzQ0Njg3OThkNDczNDA1YzFmNjI2NTJh
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDYtMTggIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBpbXBsZW1lbnRh
dGlvbiBmb3IgV0tDb250ZW50VmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk4OTg2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTg3NTE4OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVVNF
X1VJQ09OVEVYVE1FTlUgZm9yIGlPUyAxMysuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoK
KwogMjAxOS0wNi0xOCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBBZGQgcHJlbGltaW5hcnkgQU5HTEUgYmFja2VuZCB0byBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA1MDg0NzJlYzU5ODFiMzRkZTcwOWZhMmEzMzA2OGZiNmMwNDc2NzI3Li5lMDMy
MTBkYzY4OTc0MjU4ZDNlNjk1NTcyYmM4MmNiNDJiNWU5NWRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAxOS0wNi0xOCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CisKKyAgICAgICAgVUlDb250ZXh0TWVudUludGVyYWN0aW9uIGltcGxlbWVudGF0aW9uIGZv
ciBXS0NvbnRlbnRWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTg5ODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxODc1MTg5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluY2x1ZGUgKyBzb2Z0
IGxpbmsgRERDb250ZXh0TWVudUFjdGlvbi4KKworICAgICAgICAqIHBhbC9zcGkvaW9zL0RhdGFE
ZXRlY3RvcnNVSVNQSS5oOgorCiAyMDE5LTA2LTE4ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgTGluayB0byB0aGUgbmV3IEFwcFNTTyBwcml2YXRlIGZyYW1l
d29yawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCA1Yjc1NjliOTRlNDVmZGE3MTc4MGZiMGYyMTJlMDFlNzUwMGQxNGM1
Li45NGQ5OTQ3NmZmM2M0YWNlMzNhNDUwMTc2OTNiYjQ4YWRkNzUwMmNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ1IEBACisyMDE5LTA2LTE4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4K
KworICAgICAgICBVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24gaW1wbGVtZW50YXRpb24gZm9yIFdL
Q29udGVudFZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5ODk4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTE4NzUxODk+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFVJQ29udGV4
dE1lbnVJbnRlcmFjdGlvbiBhbmQgaXRzIGRlbGVnYXRlIGFzIGEKKyAgICAgICAgcmVwbGFjZW1l
bnQgZm9yIFVJUHJldmlld0l0ZW1Db250cm9sbGVyIGluIGlPUyAxMy4KKworICAgICAgICBJbiBv
cmRlciB0byBwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvdXIgYXMgbXVjaCBhcyBwb3NzaWJsZSwK
KyAgICAgICAgd2UgY2hlY2sgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBuZXcgV2ViS2l0IEFQ
SSB0byBjb25maWd1cmUKKyAgICAgICAgdGhlIG1lbnUuIElmIHRoYXQgaXMgbm90IHByZXNlbnQs
IHdlIGF0dGVtcHQgdG8gY29udmVydAorICAgICAgICB0aGUgcmVzdWx0cyBvZiB0aGUgZXhpc3Rp
bmcgV2ViS2l0IFdLUHJldmlld0FjdGlvbiBkZWxlZ2F0ZXMKKyAgICAgICAgaW50byBzb21ldGhp
bmcgdGhhdCB3b3JrcyB3aXRoIFVJQ29udGV4dE1lbnVzLgorCisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBz
ZXR1cEludGVyYWN0aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2NvbnRlbnRzT2ZV
c2VySW50ZXJmYWNlSXRlbTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVnaXN0ZXJQ
cmV2aWV3XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3VucmVnaXN0ZXJQcmV2aWV3XSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3Nob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hh
bmdlZDpdKToKKyAgICAgICAgKG5lZWRzRGVwcmVjYXRlZFByZXZpZXdBUEkpOgorICAgICAgICAo
dWlBY3Rpb25Gb3JQcmV2aWV3QWN0aW9uKToKKyAgICAgICAgKG1lbnVGcm9tUHJldmlld09yRGVm
YXVsdHMpOgorICAgICAgICAodGl0bGVGb3JNZW51KToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBhc3NpZ25MZWdhY3lEYXRhRm9yQ29udGV4dE1lbnVJbnRlcmFjdGlvbl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNvbnRleHRNZW51SW50ZXJhY3Rpb246Y29uZmlndXJhdGlvbkZvck1l
bnVBdExvY2F0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9jb250ZXh0TWVudUlu
dGVyYWN0aW9uOmNvbmZpZ3VyYXRpb25Gb3JNZW51QXRMb2NhdGlvbjpjb21wbGV0aW9uOl0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNvbnRpbnVlQ29udGV4dE1lbnVJbnRlcmFjdGlvbjpd
KToKKyAgICAgICAgKHVpSW1hZ2VGb3JJbWFnZSk6CisgICAgICAgIChjcmVhdGVUYXJnZXRlZFBy
ZXZpZXcpOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF90YXJnZXRlZFByZXZpZXddKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBjb250ZXh0TWVudUludGVyYWN0aW9uOnByZXZpZXdGb3JI
aWdobGlnaHRpbmdNZW51V2l0aENvbmZpZ3VyYXRpb246XSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgY29udGV4dE1lbnVJbnRlcmFjdGlvbldpbGxQcmVzZW50Ol0pOgorICAgICAgICAoLVtX
S0NvbnRlbnRWaWV3IGNvbnRleHRNZW51SW50ZXJhY3Rpb246cHJldmlld0ZvckRpc21pc3NpbmdN
ZW51V2l0aENvbmZpZ3VyYXRpb246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY29udGV4
dE1lbnVJbnRlcmFjdGlvbjp3aWxsQ29tbWl0V2l0aEFuaW1hdG9yOl0pOgorICAgICAgICAoLVtX
S0NvbnRlbnRWaWV3IGNvbnRleHRNZW51SW50ZXJhY3Rpb25EaWRFbmQ6XSk6CisgICAgICAgICgt
W1dLQ29udGVudFZpZXcgc2hvdWxkVXNlUHJldmlld0ZvckxvbmdQcmVzc10pOiBEZWxldGVkLgor
CiAyMDE5LTA2LTE4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVXBkYXRlIFdlYktpdCBBUEkgdG8gc2VwYXJhdGVseSByZXRyaWV2ZSBhY3Rp
b25zIGFuZCB1c2UgY29udGV4dCBtZW51cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggOGE1NmM2Y2YwNTMxNjgz
ZDkwZmMyMzk1ZTMyZWU4ZDk1NTgyNDNlMi4uODk3MzJhMDg2ZGJmODEyNGMxMzYyZWYyZjQ4YWVj
ZTgxM2VlMzgzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC0xNTg1LDMgKzE1ODUsNyBAQAogI2lmIChQTEFU
Rk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMCB8
fCBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAx
NTAwKQogI2RlZmluZSBIQVZFX0FQUF9TU08gMQogI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1Mp
ICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMAorI2RlZmluZSBV
U0VfVUlDT05URVhUTUVOVSAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL2lvcy9EYXRhRGV0ZWN0b3JzVUlTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL2lvcy9EYXRhRGV0ZWN0b3JzVUlTUEkuaAppbmRleCAwOWZjNTlmMjAzMTk5YjE0NWJi
NTU3MWRlYzc3ZmI4YzA5MjdiOGU0Li44MmJhNTAzODVmYjBmNzMzN2RkYTlhMDI4YjJiNDZiYWE3
NjYwMWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9pb3MvRGF0YURl
dGVjdG9yc1VJU1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvaW9zL0RhdGFE
ZXRlY3RvcnNVSVNQSS5oCkBAIC0zMSw2ICszMSw5IEBACiAjaWYgVVNFKEFQUExFX0lOVEVSTkFM
X1NESykKIAogI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0REQWN0aW9uLmg+CisjaWYgSEFWRShM
SU5LX1BSRVZJRVcpICYmIFVTRShVSUNPTlRFWFRNRU5VKQorI2ltcG9ydCA8RGF0YURldGVjdG9y
c1VJL0REQ29udGV4dE1lbnVBY3Rpb24uaD4KKyNlbmRpZgogI2ltcG9ydCA8RGF0YURldGVjdG9y
c1VJL0RERGV0ZWN0aW9uQ29udHJvbGxlci5oPgogCiAjZWxzZQpAQCAtNDYsNiArNDksMTMgQEAK
IEBwcm9wZXJ0eSAocmVhZG9ubHkpIE5TU3RyaW5nICphY3Rpb25VVEk7CiBAZW5kCiAKKyNpZiBI
QVZFKExJTktfUFJFVklFVykgJiYgVVNFKFVJQ09OVEVYVE1FTlUpCitAY2xhc3MgVUlDb250ZXh0
TWVudUNvbmZpZ3VyYXRpb247CitAaW50ZXJmYWNlIEREQ29udGV4dE1lbnVBY3Rpb24KKysgKFVJ
Q29udGV4dE1lbnVDb25maWd1cmF0aW9uICopY29udGV4dE1lbnVDb25maWd1cmF0aW9uV2l0aFVS
TDooTlNVUkwgKilVUkwgaW5WaWV3OihVSVZpZXcgKil2aWV3IGNvbnRleHQ6KE5TRGljdGlvbmFy
eSAqKWNvbnRleHQgbWVudUlkZW50aWZpZXI6KE5TU3RyaW5nICopbWVudUlkZW50aWZpZXI7CitA
ZW5kCisjZW5kaWYKKwogQHByb3RvY29sIERERGV0ZWN0aW9uQ29udHJvbGxlckludGVyYWN0aW9u
RGVsZWdhdGUgPE5TT2JqZWN0PgogQGVuZAogCkBAIC03MCw2ICs4MCw5IEBACiBAZW5kCiAKIFNP
RlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhEYXRhRGV0ZWN0b3JzVUkpCisjaWYgSEFWRShMSU5L
X1BSRVZJRVcpICYmIFVTRShVSUNPTlRFWFRNRU5VKQorU09GVF9MSU5LX0NMQVNTKERhdGFEZXRl
Y3RvcnNVSSwgRERDb250ZXh0TWVudUFjdGlvbik7CisjZW5kaWYKIFNPRlRfTElOS19DTEFTUyhE
YXRhRGV0ZWN0b3JzVUksIERERGV0ZWN0aW9uQ29udHJvbGxlcikKIFNPRlRfTElOS19DT05TVEFO
VChEYXRhRGV0ZWN0b3JzVUksIGtEYXRhRGV0ZWN0b3JzTGVhZGluZ1RleHQsIGNvbnN0IE5TU3Ry
aW5nICopCiBTT0ZUX0xJTktfQ09OU1RBTlQoRGF0YURldGVjdG9yc1VJLCBrRGF0YURldGVjdG9y
c1RyYWlsaW5nVGV4dCwgY29uc3QgTlNTdHJpbmcgKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9z
cGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggNzQ0NDQ4OTkyODAwOWNlOGY5ZjExZDFlNDMyMzlhZjE0
ODI2ZThiYS4uZTE0ZGIxNGVkNTU5NmM5M2EyYTM4YzU5Mjg3NzVmNjBjMTJhNTY5OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTg3LDYgKzg3LDcgQEAK
ICNpbXBvcnQgPFVJS2l0L19VSU5hdmlnYXRpb25QYXJhbGxheFRyYW5zaXRpb24uaD4KIAogI2lm
IEhBVkUoTElOS19QUkVWSUVXKQorI2ltcG9ydCA8VUlLaXQvVUlQcmV2aWV3QWN0aW9uX1ByaXZh
dGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJUHJldmlld0l0ZW1Db250cm9sbGVyLmg+CiAjZW5kaWYK
IApAQCAtMTA2Niw2ICsxMDY3LDEwIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU0ludGVnZXIsIFVJ
V0tEb2N1bWVudFJlcXVlc3RGbGFncykgewogQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikg
aWQgPE5TQ29weWluZz4gaW5wdXRFbGVtZW50SWRlbnRpZmllcjsKIEBlbmQKIAorQGludGVyZmFj
ZSBVSVByZXZpZXdBY3Rpb24gKCkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIFVJSW1h
Z2UgKmltYWdlOworQGVuZAorCiAjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAog
QGludGVyZmFjZSBVSUdlc3R1cmVSZWNvZ25pemVyIChTdGFnaW5nXzQ1OTcwMDQwKQpAQCAtMTE3
OSw2ICsxMTg0LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjdXJyZW50VXNlckludGVyZmFjZUlk
aW9tSXNQYWQoKQogLSAodm9pZClzZXROZXh0UHJldmlvdXNJdGVtc1Zpc2libGU6KEJPT0wpdmlz
aWJsZTsKIEBlbmQKIAorI2lmIEhBVkUoTElOS19QUkVWSUVXKSAmJiBVU0UoVUlDT05URVhUTUVO
VSkKK0BpbnRlcmZhY2UgVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKE5lZWRlZFVudGlsNTEy
ODg0MzVGaXhlZCkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBpZCA8TlNDb3B5aW5nPiBp
ZGVudGlmaWVyOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIFVJQ29udGV4dE1lbnVDb250
ZW50UHJldmlld1Byb3ZpZGVyIHByZXZpZXdQcm92aWRlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBVSUNvbnRleHRNZW51QWN0aW9uUHJvdmlkZXIgYWN0aW9uUHJvdmlkZXI7CitAZW5k
CisjZW5kaWYKKwogV1RGX0VYVEVSTl9DX0JFR0lOCiAKIEJPT0wgVUlLZXlib2FyZEVuYWJsZWRJ
bnB1dE1vZGVzQWxsb3dPbmVUb01hbnlTaG9ydGN1dHModm9pZCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbQppbmRl
eCAwOGFjZmYyYWE1N2I1YWRkZjJlMjM1MGFmNDg0ODMxMjg4NDljZWNmLi5lMzQxYzY4MTNjZDgw
MTNhOTEyZGMyOTgyNGVmYjY2ZWIxN2FiYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIubW0KQEAgLTMyLDE2ICsz
Miw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ludFNpemUuaD4KICNpbXBvcnQgPF9XS0VsZW1lbnRB
Y3Rpb24uaD4KIAotI2lmIEhBVkUoTElOS19QUkVWSUVXKQotI2lmIFVTRShBUFBMRV9JTlRFUk5B
TF9TREspICYmIF9faGFzX2luY2x1ZGUoPFdlYktpdEFkZGl0aW9ucy9XS0ltYWdlUHJldmlld1Zp
ZXdDb250cm9sbGVyQWRkaXRpb25zLm1tPikKLSNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvV0tJ
bWFnZVByZXZpZXdWaWV3Q29udHJvbGxlckFkZGl0aW9ucy5tbT4KLSNlbHNlCi1zdGF0aWMgdm9p
ZCBzZXRBZGRpdGlvbmFsUHJldmlld0FjdGlvbkluZm8oVUlQcmV2aWV3QWN0aW9uICosIF9XS0Vs
ZW1lbnRBY3Rpb24gKikKLXsKLX0KLSNlbmRpZgotI2VuZGlmCi0KIEBpbXBsZW1lbnRhdGlvbiBX
S0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyIHsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
X2ltYWdlOwogICAgIFJldGFpblB0cjxVSUltYWdlVmlldz4gX2ltYWdlVmlldzsKQEAgLTExMiw3
ICsxMDIsNyBAQCBJR05PUkVfV0FSTklOR1NfRU5ECiAgICAgICAgIFVJUHJldmlld0FjdGlvbiAq
cHJldmlld0FjdGlvbiA9IFtVSVByZXZpZXdBY3Rpb24gYWN0aW9uV2l0aFRpdGxlOmltYWdlQWN0
aW9uLnRpdGxlIHN0eWxlOlVJUHJldmlld0FjdGlvblN0eWxlRGVmYXVsdCBoYW5kbGVyOl4oVUlQ
cmV2aWV3QWN0aW9uICphY3Rpb24sIFVJVmlld0NvbnRyb2xsZXIgKnByZXZpZXdWaWV3Q29udHJv
bGxlcikgewogICAgICAgICAgICAgW2ltYWdlQWN0aW9uIHJ1bkFjdGlvbldpdGhFbGVtZW50SW5m
bzpfYWN0aXZhdGVkRWxlbWVudEluZm8uZ2V0KCldOwogICAgICAgICB9XTsKLSAgICAgICAgc2V0
QWRkaXRpb25hbFByZXZpZXdBY3Rpb25JbmZvKHByZXZpZXdBY3Rpb24sIGltYWdlQWN0aW9uKTsK
KyAgICAgICAgcHJldmlld0FjdGlvbi5pbWFnZSA9IFtfV0tFbGVtZW50QWN0aW9uIGltYWdlRm9y
RWxlbWVudEFjdGlvblR5cGU6aW1hZ2VBY3Rpb24udHlwZV07CiAKICAgICAgICAgW3ByZXZpZXdB
Y3Rpb25zIGFkZE9iamVjdDpwcmV2aWV3QWN0aW9uXTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5kZXgg
M2U1NzAxN2NhYWYwZGRhNzdiZDEyOTA5ZGUzYTcxYzVmNWU3YjE5MS4uMzBjMGFkYjIxYWI3Y2Ix
ZGQ3ZDkyODI0NDgxM2U2MmEzMDhjNDNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAtNTksMTAgKzU5LDYg
QEAKICNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBfX2hhc19pbmNsdWRlKDxX
ZWJLaXRBZGRpdGlvbnMvV0tJbnRlcmFjdGlvblByZXZpZXdBZGRpdGlvbnMuaD4pCi0jaW1wb3J0
IDxXZWJLaXRBZGRpdGlvbnMvV0tJbnRlcmFjdGlvblByZXZpZXdBZGRpdGlvbnMuaD4KLSNlbmRp
ZgotCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIE9wZW5QYW5lbFBhcmFtZXRlcnM7CiB9CkBAIC0x
MDEsNiArOTcsNyBAQCBzdHJ1Y3QgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0OwogQGNsYXNzIFVJ
SG92ZXJHZXN0dXJlUmVjb2duaXplcjsKIEBjbGFzcyBXZWJFdmVudDsKIEBjbGFzcyBXS0FjdGlv
blNoZWV0QXNzaXN0YW50OworQGNsYXNzIFdLQ29udGV4dE1lbnVFbGVtZW50SW5mbzsKIEBjbGFz
cyBXS0RyYXdpbmdDb29yZGluYXRvcjsKIEBjbGFzcyBXS0ZvY3VzZWRGb3JtQ29udHJvbFZpZXc7
CiBAY2xhc3MgV0tGb3JtSW5wdXRDb250cm9sOwpAQCAtMjQ1LDggKzI0MiwxMyBAQCBzdHJ1Y3Qg
V0tBdXRvQ29ycmVjdGlvbkRhdGEgewogICAgIFJldGFpblB0cjxVSUdlc3R1cmVSZWNvZ25pemVy
PiBfcHJldmlld1NlY29uZGFyeUdlc3R1cmVSZWNvZ25pemVyOwogICAgIFZlY3Rvcjxib29sPiBf
Zm9jdXNTdGF0ZVN0YWNrOwogI2lmIEhBVkUoTElOS19QUkVWSUVXKQotI2lmIFVTRShMT05HX1BS
RVNTX0ZPUl9MSU5LX1BSRVZJRVcpCi0gICAgTE9OR19QUkVTU19MSU5LX1BSRVZJRVdfTUVNQkVS
UworI2lmIFVTRShVSUNPTlRFWFRNRU5VKQorICAgIFJldGFpblB0cjxVSUNvbnRleHRNZW51SW50
ZXJhY3Rpb24+IF9jb250ZXh0TWVudUludGVyYWN0aW9uOworICAgIFJldGFpblB0cjxXS0NvbnRl
eHRNZW51RWxlbWVudEluZm8+IF9jb250ZXh0TWVudUVsZW1lbnRJbmZvOworICAgIEJPT0wgX3No
b3dMaW5rUHJldmlld3M7CisgICAgUmV0YWluUHRyPFVJVmlld0NvbnRyb2xsZXI+IF9jb250ZXh0
TWVudUxlZ2FjeVByZXZpZXdDb250cm9sbGVyOworICAgIFJldGFpblB0cjxVSU1lbnU+IF9jb250
ZXh0TWVudUxlZ2FjeU1lbnU7CisgICAgQk9PTCBfY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdh
Y3lEYXRhOwogI2Vsc2UKICAgICBSZXRhaW5QdHI8VUlQcmV2aWV3SXRlbUNvbnRyb2xsZXI+IF9w
cmV2aWV3SXRlbUNvbnRyb2xsZXI7CiAjZW5kaWYKQEAgLTUzMiwxNyArNTM0LDEzIEBAIEZPUl9F
QUNIX1BSSVZBVEVfV0tDT05URU5UVklFV19BQ1RJT04oREVDTEFSRV9XS0NPTlRFTlRWSUVXX0FD
VElPTl9GT1JfV0VCX1ZJRVcpCiBAZW5kCiAKICNpZiBIQVZFKExJTktfUFJFVklFVykKLSNpZiBV
U0UoTE9OR19QUkVTU19GT1JfTElOS19QUkVWSUVXKQotQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3
IChXS0ludGVyYWN0aW9uUHJldmlldykgPExPTkdfUFJFU1NfTElOS19QUkVWSUVXX1BST1RPQ09M
PgorI2lmIFVTRShVSUNPTlRFWFRNRU5VKQorQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3IChXS0lu
dGVyYWN0aW9uUHJldmlldykgPFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbkRlbGVnYXRlPgogI2Vs
c2UKIEBpbnRlcmZhY2UgV0tDb250ZW50VmlldyAoV0tJbnRlcmFjdGlvblByZXZpZXcpIDxVSVBy
ZXZpZXdJdGVtRGVsZWdhdGU+CiAjZW5kaWYKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBCT09MIHNob3VsZFVzZVByZXZpZXdGb3JMb25nUHJlc3M7Ci0KIC0gKHZvaWQpX3JlZ2lz
dGVyUHJldmlldzsKIC0gKHZvaWQpX3VucmVnaXN0ZXJQcmV2aWV3OwotCiBAZW5kCiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24ubW0KaW5kZXggNWNhY2UwNGJlNmUwODkxZTlhZWM2OTE0ZmEwMDYzMzkzNTNh
YWZkZi4uYzhjNGRjNWM0NjA0NjZiNDI3YjNhY2I5MDhjN2E0YmFkOTFmMWNhNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogI2lt
cG9ydCAiQVBJVUlDbGllbnQuaCIKKyNpbXBvcnQgIkNvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNr
ZXIuaCIKICNpbXBvcnQgIkRvY3VtZW50RWRpdGluZ0NvbnRleHQuaCIKICNpbXBvcnQgIkVkaXRh
YmxlSW1hZ2VDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJJbnB1dFZpZXdVcGRhdGVEZWZlcnJlci5o
IgpAQCAtMTA1LDYgKzEwNiw4IEBACiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0RhdGFEZXRlY3Rv
cnNDb3JlU1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9EYXRhRGV0ZWN0b3JzVUlTUEkuaD4K
ICNpbXBvcnQgPHBhbC9zcGkvaW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KKyNpbXBvcnQgPHd0
Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBv
cnQgPHd0Zi9PcHRpb25hbC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8
d3RmL1NldEZvclNjb3BlLmg+CkBAIC0xNTEsOCArMTU0LDkgQEAgU09GVF9MSU5LX0NMQVNTKE1h
bmFnZWRDb25maWd1cmF0aW9uLCBNQ1Byb2ZpbGVDb25uZWN0aW9uKTsKIFNPRlRfTElOS19DT05T
VEFOVChNYW5hZ2VkQ29uZmlndXJhdGlvbiwgTUNGZWF0dXJlRGVmaW5pdGlvbkxvb2t1cEFsbG93
ZWQsIE5TU3RyaW5nICopCiAjZW5kaWYKIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYm
IF9faGFzX2luY2x1ZGUoPFdlYktpdEFkZGl0aW9ucy9XS0ludGVyYWN0aW9uUHJldmlld0FkZGl0
aW9ucy5oPikKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9XS0ludGVyYWN0aW9uUHJldmlld0Fk
ZGl0aW9ucy5oPgorI2lmIEhBVkUoTElOS19QUkVWSUVXKSAmJiBVU0UoVUlDT05URVhUTUVOVSkK
K3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHdlYmtpdFNob3dMaW5rUHJldmlld3NQcmVmZXJlbmNl
S2V5ID0gQCJXZWJLaXRTaG93TGlua1ByZXZpZXdzIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0
IHdlYmtpdFNob3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZE5vdGlmaWNhdGlvbiA9IEAi
V2ViS2l0U2hvd0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFuZ2VkIjsKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oV0FUQ0hPUykKQEAgLTc2NCwxNCArNzY4LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBoYXNGb2N1c2VkRWxlbWVudChXZWJLaXQ6OkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24gZm9j
dXNlZEVsCiAgICAgW19oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBzZXREZWxh
eTpoaWdobGlnaHREZWxheV07CiAgICAgW19oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2du
aXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKIAotI2lmIEhBVkUoTElOS19QUkVWSUVXKQotICAgIGlm
ICghc2VsZi5zaG91bGRVc2VQcmV2aWV3Rm9yTG9uZ1ByZXNzKQorI2lmIEhBVkUoTElOS19QUkVW
SUVXKSAmJiAhVVNFKFVJQ09OVEVYVE1FTlUpCisgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6
ZXI6X2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKyAgICBbc2Vs
ZiBfY3JlYXRlQW5kQ29uZmlndXJlTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXJdOwogI2VuZGlm
Ci0gICAgewotICAgICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfaGlnaGxpZ2h0TG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwotCi0gICAgICAgIFtzZWxmIF9jcmVhdGVB
bmRDb25maWd1cmVMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcl07Ci0gICAgfQogCiAjaWYgRU5B
QkxFKERBVEFfSU5URVJBQ1RJT04pCiAgICAgW3NlbGYgc2V0dXBEcmFnQW5kRHJvcEludGVyYWN0
aW9uc107CkBAIC03MzY3LDcgKzczNjcsNyBAQCBzdGF0aWMgV2ViRXZlbnRGbGFncyB3ZWJFdmVu
dEZsYWdzRm9yVUlLZXlNb2RpZmllckZsYWdzKFVJS2V5TW9kaWZpZXJGbGFncyBmbGFncwogCiAj
aWYgSEFWRShMSU5LX1BSRVZJRVcpCiAgICAgaWYgKFt1c2VySW50ZXJmYWNlSXRlbSBpc0VxdWFs
VG9TdHJpbmc6QCJsaW5rUHJldmlld1BvcG92ZXJDb250ZW50cyJdKSB7Ci0jaWYgVVNFKExPTkdf
UFJFU1NfRk9SX0xJTktfUFJFVklFVykKKyNpZiBVU0UoVUlDT05URVhUTUVOVSkKICAgICAgICAg
cmV0dXJuIEB7IHVzZXJJbnRlcmZhY2VJdGVtOiBAeyBAInBhZ2VVUkwiOiBXVEY6OnVzZXJWaXNp
YmxlU3RyaW5nKF9wb3NpdGlvbkluZm9ybWF0aW9uLnVybCkgfSB9OwogI2Vsc2UKICAgICAgICAg
TlNTdHJpbmcgKnVybCA9IFtfcHJldmlld0l0ZW1Db250cm9sbGVyIHByZXZpZXdEYXRhXVtVSVBy
ZXZpZXdEYXRhTGlua107CkBAIC03NDExLDE3ICs3NDExLDU4OCBAQCBzdGF0aWMgTlNTdHJpbmcg
KnByZXZpZXdJZGVudGlmaWVyRm9yRWxlbWVudEFjdGlvbihfV0tFbGVtZW50QWN0aW9uICphY3Rp
b24pCiAgICAgcmV0dXJuIG5pbDsKIH0KIAotI2lmIFVTRShMT05HX1BSRVNTX0ZPUl9MSU5LX1BS
RVZJRVcpCi0jaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL1dLSW50ZXJhY3Rpb25QcmV2aWV3QWRk
aXRpb25zLm1tPgotI2Vsc2UKKyNpZiBVU0UoVUlDT05URVhUTUVOVSkKIAogQGltcGxlbWVudGF0
aW9uIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb25QcmV2aWV3KQogCi0tIChCT09MKXNob3Vs
ZFVzZVByZXZpZXdGb3JMb25nUHJlc3MKKy0gKHZvaWQpX3JlZ2lzdGVyUHJldmlldwogewotICAg
IHJldHVybiBOTzsKKyAgICBpZiAoIV93ZWJWaWV3LmFsbG93c0xpbmtQcmV2aWV3KQorICAgICAg
ICByZXR1cm47CisKKyAgICBfY29udGV4dE1lbnVJbnRlcmFjdGlvbiA9IGFkb3B0TlMoW1tVSUNv
bnRleHRNZW51SW50ZXJhY3Rpb24gYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6c2VsZl0pOworICAg
IF9jb250ZXh0TWVudUhhc1JlcXVlc3RlZExlZ2FjeURhdGEgPSBOTzsKKyAgICBbc2VsZiBhZGRJ
bnRlcmFjdGlvbjpfY29udGV4dE1lbnVJbnRlcmFjdGlvbi5nZXQoKV07CisKKyAgICBbc2VsZiBf
c2hvd0xpbmtQcmV2aWV3c1ByZWZlcmVuY2VDaGFuZ2VkOm5pbF07CisKKyAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKF9zaG93TGlua1ByZXZpZXdzUHJlZmVyZW5jZUNoYW5nZWQ6KSBuYW1lOndlYmtpdFNo
b3dMaW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsK
K30KKworLSAodm9pZClfdW5yZWdpc3RlclByZXZpZXcKK3sKKyAgICBpZiAoIV9jb250ZXh0TWVu
dUludGVyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiByZW1vdmVJbnRlcmFj
dGlvbjpfY29udGV4dE1lbnVJbnRlcmFjdGlvbi5nZXQoKV07CisgICAgX2NvbnRleHRNZW51SW50
ZXJhY3Rpb24gPSBuaWw7CisKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTp3ZWJraXRTaG93TGlua1ByZXZpZXdzUHJlZmVy
ZW5jZUNoYW5nZWROb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Cit9CisKKy0gKHZvaWQpX3Nob3dM
aW5rUHJldmlld3NQcmVmZXJlbmNlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRp
b24KK3sKKyAgICBCb29sZWFuIGtleUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0ID0gZmFsc2U7Cisg
ICAgQm9vbGVhbiBwcmVmVmFsdWUgPSBDRlByZWZlcmVuY2VzR2V0QXBwQm9vbGVhblZhbHVlKChf
X2JyaWRnZSBDRlN0cmluZ1JlZil3ZWJraXRTaG93TGlua1ByZXZpZXdzUHJlZmVyZW5jZUtleSwg
a0NGUHJlZmVyZW5jZXNDdXJyZW50QXBwbGljYXRpb24sICZrZXlFeGlzdHNBbmRIYXNWYWxpZEZv
cm1hdCk7CisgICAgaWYgKGtleUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0KQorICAgICAgICBfc2hv
d0xpbmtQcmV2aWV3cyA9IHByZWZWYWx1ZTsKKyAgICBlbHNlCisgICAgICAgIF9zaG93TGlua1By
ZXZpZXdzID0gWUVTOworfQorCitzdGF0aWMgYm9vbCBuZWVkc0RlcHJlY2F0ZWRQcmV2aWV3QVBJ
KGlkPFdLVUlEZWxlZ2F0ZT4gZGVsZWdhdGUpCit7CisgICAgLy8gRklYTUU6IFJlcGxhY2UgdGhl
c2Ugd2l0aCBib29sZWFucyBpbiBVSURlbGVnYXRlLmguCisgICAgcmV0dXJuIGRlbGVnYXRlCisg
ICAgJiYgIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNv
bnRleHRNZW51Q29uZmlndXJhdGlvbkZvckVsZW1lbnQ6Y29tcGxldGlvbkhhbmRsZXI6KV0KKyAg
ICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpjb250
ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVtZW50OmNvbXBsZXRpb25IYW5kbGVyOildCisgICAg
JiYgIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNvbnRl
eHRNZW51Rm9yRWxlbWVudDp3aWxsQ29tbWl0V2l0aEFuaW1hdG9yOildCisgICAgJiYgIVtkZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVGb3JF
bGVtZW50OndpbGxDb21taXRXaXRoQW5pbWF0b3I6KV0KKyAgICAmJiAhW2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVXaWxsUHJlc2VudEZv
ckVsZW1lbnQ6KV0KKyAgICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3Iod2ViVmlldzpjb250ZXh0TWVudVdpbGxQcmVzZW50Rm9yRWxlbWVudDopXQorICAgICYmICFb
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpjb250ZXh0TWVu
dURpZEVuZEZvckVsZW1lbnQ6KV0KKyAgICAmJiAhW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3Iod2ViVmlldzpjb250ZXh0TWVudURpZEVuZEZvckVsZW1lbnQ6KV0KKyAgICAm
JiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRQ
cmV2aWV3RWxlbWVudDopXQorICAgICAgICB8fCBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcih3ZWJWaWV3OnByZXZpZXdpbmdWaWV3Q29udHJvbGxlckZvckVsZW1lbnQ6ZGVm
YXVsdEFjdGlvbnM6KV0KKyAgICAgICAgfHwgW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Iod2ViVmlldzpjb21taXRQcmV2aWV3aW5nVmlld0NvbnRyb2xsZXI6KV0KKyAgICAg
ICAgfHwgW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6cHJl
dmlld1ZpZXdDb250cm9sbGVyRm9yVVJMOmRlZmF1bHRBY3Rpb25zOmVsZW1lbnRJbmZvOildCisg
ICAgICAgIHx8IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3
OnByZXZpZXdWaWV3Q29udHJvbGxlckZvclVSTDopXQorICAgICAgICB8fCBbZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpwcmV2aWV3Vmlld0NvbnRyb2xsZXJG
b3JJbWFnZTphbHRlcm5hdGVVUkw6ZGVmYXVsdEFjdGlvbnM6ZWxlbWVudEluZm86KV0pOworfQor
CitBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorc3RhdGljIE5TQXJyYXk8V0tQ
cmV2aWV3QWN0aW9uICo+ICp3a1ByZXZpZXdBY3Rpb25zRnJvbUVsZW1lbnRBY3Rpb25zKE5TQXJy
YXk8X1dLRWxlbWVudEFjdGlvbiAqPiAqZWxlbWVudEFjdGlvbnMsIF9XS0FjdGl2YXRlZEVsZW1l
bnRJbmZvICplbGVtZW50SW5mbykKK3sKKyAgICBOU011dGFibGVBcnJheTxXS1ByZXZpZXdBY3Rp
b24gKj4gKnByZXZpZXdBY3Rpb25zID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5
OltlbGVtZW50QWN0aW9ucyBjb3VudF1dOworICAgIGZvciAoX1dLRWxlbWVudEFjdGlvbiAqZWxl
bWVudEFjdGlvbiBpbiBlbGVtZW50QWN0aW9ucykgeworICAgICAgICBXS1ByZXZpZXdBY3Rpb24g
KnByZXZpZXdBY3Rpb24gPSBbV0tQcmV2aWV3QWN0aW9uIGFjdGlvbldpdGhJZGVudGlmaWVyOnBy
ZXZpZXdJZGVudGlmaWVyRm9yRWxlbWVudEFjdGlvbihlbGVtZW50QWN0aW9uKSB0aXRsZTplbGVt
ZW50QWN0aW9uLnRpdGxlIHN0eWxlOlVJUHJldmlld0FjdGlvblN0eWxlRGVmYXVsdCBoYW5kbGVy
Ol4oVUlQcmV2aWV3QWN0aW9uICosIFVJVmlld0NvbnRyb2xsZXIgKikgeworICAgICAgICAgICAg
W2VsZW1lbnRBY3Rpb24gcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOmVsZW1lbnRJbmZvXTsKKyAg
ICAgICAgfV07CisgICAgICAgIHByZXZpZXdBY3Rpb24uaW1hZ2UgPSBbX1dLRWxlbWVudEFjdGlv
biBpbWFnZUZvckVsZW1lbnRBY3Rpb25UeXBlOmVsZW1lbnRBY3Rpb24udHlwZV07CisgICAgICAg
IFtwcmV2aWV3QWN0aW9ucyBhZGRPYmplY3Q6cHJldmlld0FjdGlvbl07CisgICAgfQorICAgIHJl
dHVybiBwcmV2aWV3QWN0aW9uczsKK30KKworc3RhdGljIFVJQWN0aW9uICp1aUFjdGlvbkZvclBy
ZXZpZXdBY3Rpb24oVUlQcmV2aWV3QWN0aW9uICpwcmV2aWV3QWN0aW9uLCBVSVZpZXdDb250cm9s
bGVyICpwcmV2aWV3Vmlld0NvbnRyb2xsZXIpCit7CisgICAgLy8gVUlQcmV2aWV3QWN0aW9uSXRl
bS5pbWFnZSBpcyBTUEksIHNvIG5vIGV4dGVybmFsIGNsaWVudHMgd2lsbCBiZSBhYmxlCisgICAg
Ly8gdG8gcHJvdmlkZSBnbHlwaHMgZm9yIGFjdGlvbnMgPHJkYXI6Ly9wcm9ibGVtLzUwMTUxODU1
Pi4KKyAgICAvLyBIb3dldmVyLCB0aGV5IHNob3VsZCBtaWdyYXRlIHRvIHRoZSBuZXcgQVBJLgor
CisgICAgcmV0dXJuIFtVSUFjdGlvbiBhY3Rpb25XaXRoVGl0bGU6cHJldmlld0FjdGlvbi50aXRs
ZSBpbWFnZTpwcmV2aWV3QWN0aW9uLmltYWdlIGlkZW50aWZpZXI6bmlsIGhhbmRsZXI6XihVSUFj
dGlvbiAqYWN0aW9uKSB7CisgICAgICAgIHByZXZpZXdBY3Rpb24uaGFuZGxlcihwcmV2aWV3QWN0
aW9uLCBwcmV2aWV3Vmlld0NvbnRyb2xsZXIpOworICAgIH1dOworfQorQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECisKK3N0YXRpYyBOU0FycmF5PFVJTWVudUVsZW1lbnQgKj4gKm1l
bnVFbGVtZW50c0Zyb21QcmV2aWV3T3JEZWZhdWx0cyhVSVZpZXdDb250cm9sbGVyICpwcmV2aWV3
Vmlld0NvbnRyb2xsZXIsIGNvbnN0IFJldGFpblB0cjxOU0FycmF5PiYgZGVmYXVsdEVsZW1lbnRB
Y3Rpb25zLCBSZXRhaW5QdHI8X1dLQWN0aXZhdGVkRWxlbWVudEluZm8+IGVsZW1lbnRJbmZvKQor
eworICAgIGF1dG8gYWN0aW9ucyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpk
ZWZhdWx0RWxlbWVudEFjdGlvbnMuZ2V0KCkuY291bnRdOworCisgICAgLy8gT25lIG9mIHRoZSBk
ZWxlZ2F0ZXMgbWF5IGhhdmUgcHJvdmlkZWQgYSBVSVZpZXdDb250cm9sbGVyIHdpdGggYSBwcmV2
aWV3QWN0aW9uSXRlbXMgYXJyYXkuIElmIHNvLAorICAgIC8vIHdlIG5lZWQgdG8gY29udmVydCBl
YWNoIFVJUHJldmlld0FjdGlvbkl0ZW0gaW50byBhIFVJQWN0aW9uLgorICAgIGlmIChwcmV2aWV3
Vmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
QkVHSU4KKyAgICAgICAgTlNBcnJheTxpZDxVSVByZXZpZXdBY3Rpb25JdGVtPj4gKnByZXZpZXdB
Y3Rpb25zID0gcHJldmlld1ZpZXdDb250cm9sbGVyLnByZXZpZXdBY3Rpb25JdGVtczsKKyAgICAg
ICAgZm9yIChVSVByZXZpZXdBY3Rpb24gKnByZXZpZXdBY3Rpb24gaW4gcHJldmlld0FjdGlvbnMp
CisgICAgICAgICAgICBbYWN0aW9ucyBhZGRPYmplY3Q6dWlBY3Rpb25Gb3JQcmV2aWV3QWN0aW9u
KHByZXZpZXdBY3Rpb24sIHByZXZpZXdWaWV3Q29udHJvbGxlcildOworICAgICAgICBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAgICB9CisKKyAgICBpZiAoIVthY3Rpb25zIGNv
dW50XSkgeworICAgICAgICAvLyBXZSBlaXRoZXIgZGlkbid0IGdldCBhIGN1c3RvbSBwcmV2aWV3
IFVJVmlld0NvbnRyb2xsZXIsIG9yIGl0IGRpZG4ndCBwcm92aWRlIGFueSBhY3Rpb25zCisgICAg
ICAgIC8vIHNvIHdlIHNob3VsZCB1c2UgdGhlIGRlZmF1bHQgc2V0LgorICAgICAgICBmb3IgKF9X
S0VsZW1lbnRBY3Rpb24gKmVsZW1lbnRBY3Rpb24gaW4gZGVmYXVsdEVsZW1lbnRBY3Rpb25zLmdl
dCgpKSB7CisgICAgICAgICAgICBVSUltYWdlICppbWFnZSA9IFtfV0tFbGVtZW50QWN0aW9uIGlt
YWdlRm9yRWxlbWVudEFjdGlvblR5cGU6ZWxlbWVudEFjdGlvbi50eXBlXTsKKworICAgICAgICAg
ICAgW2FjdGlvbnMgYWRkT2JqZWN0OltVSUFjdGlvbiBhY3Rpb25XaXRoVGl0bGU6ZWxlbWVudEFj
dGlvbi50aXRsZSBpbWFnZTppbWFnZSBpZGVudGlmaWVyOm5pbCBoYW5kbGVyOl4oVUlBY3Rpb24g
KikgeworICAgICAgICAgICAgICAgIFtlbGVtZW50QWN0aW9uIHJ1bkFjdGlvbldpdGhFbGVtZW50
SW5mbzplbGVtZW50SW5mby5nZXQoKV07CisgICAgICAgICAgICB9XV07CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gYWN0aW9uczsKK30KKworc3RhdGljIFVJTWVudSAqbWVudUZyb21Q
cmV2aWV3T3JEZWZhdWx0cyhVSVZpZXdDb250cm9sbGVyICpwcmV2aWV3Vmlld0NvbnRyb2xsZXIs
IGNvbnN0IFJldGFpblB0cjxOU0FycmF5PiYgZGVmYXVsdEVsZW1lbnRBY3Rpb25zLCBSZXRhaW5Q
dHI8X1dLQWN0aXZhdGVkRWxlbWVudEluZm8+IGVsZW1lbnRJbmZvLCBOU1N0cmluZyAqdGl0bGUp
Cit7CisgICAgYXV0byBhY3Rpb25zID0gbWVudUVsZW1lbnRzRnJvbVByZXZpZXdPckRlZmF1bHRz
KHByZXZpZXdWaWV3Q29udHJvbGxlciwgZGVmYXVsdEVsZW1lbnRBY3Rpb25zLCBlbGVtZW50SW5m
byk7CisgICAgcmV0dXJuIFtVSU1lbnUgbWVudVdpdGhUaXRsZTp0aXRsZSBjaGlsZHJlbjphY3Rp
b25zXTsKK30KKworc3RhdGljIE5TU3RyaW5nICp0aXRsZUZvck1lbnUoYm9vbCBpc0xpbmssIGJv
b2wgc2hvd0xpbmtQcmV2aWV3cywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUp
Cit7CisgICAgaWYgKGlzTGluayAmJiAhc2hvd0xpbmtQcmV2aWV3cykgeworICAgICAgICBpZiAo
IXVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChXVEY6OnByb3RvY29sSXNKYXZhU2Ny
aXB0KHVybCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkdfS0VZKCJKYXZh
U2NyaXB0IiwgIkphdmFTY3JpcHQgQWN0aW9uIFNoZWV0IFRpdGxlIiwgIlRpdGxlIGZvciBhY3Rp
b24gc2hlZXQgZm9yIEphdmFTY3JpcHQgbGluayIpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6
dXNlclZpc2libGVTdHJpbmcodXJsKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIWlzTGlu
ayAmJiAhdGl0bGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdGl0bGU7CisKKyAgICByZXR1
cm4gbmlsOworfQorCistICh2b2lkKWFzc2lnbkxlZ2FjeURhdGFGb3JDb250ZXh0TWVudUludGVy
YWN0aW9uCit7CisgICAgQVNTRVJUKCFfY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRh
KTsKKyAgICBpZiAoX2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSkKKyAgICAgICAg
cmV0dXJuOworICAgIF9jb250ZXh0TWVudUhhc1JlcXVlc3RlZExlZ2FjeURhdGEgPSBZRVM7CisK
KyAgICBpZiAoIV93ZWJWaWV3KQorICAgICAgICByZXR1cm47CisgICAgYXV0byB1aURlbGVnYXRl
ID0gc3RhdGljX2Nhc3Q8aWQ8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KF93ZWJWaWV3LlVJRGVsZWdh
dGUpOworICAgIGlmICghdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3Qg
YXV0byYgdXJsID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24udXJsOworCisgICAgX3BhZ2UtPnN0YXJ0
SW50ZXJhY3Rpb25XaXRoRWxlbWVudEF0UG9zaXRpb24oX3Bvc2l0aW9uSW5mb3JtYXRpb24ucmVx
dWVzdC5wb2ludCk7CisKKyAgICBVSVZpZXdDb250cm9sbGVyICpwcmV2aWV3Vmlld0NvbnRyb2xs
ZXIgPSBuaWw7CisKKyAgICBhdXRvIGVsZW1lbnRJbmZvID0gYWRvcHROUyhbW19XS0FjdGl2YXRl
ZEVsZW1lbnRJbmZvIGFsbG9jXSBfaW5pdFdpdGhJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbjpfcG9zaXRpb25JbmZvcm1hdGlvbl0pOworCisgICAgaWYgKF9wb3NpdGlvbkluZm9ybWF0
aW9uLmlzTGluaykgeworICAgICAgICBfbG9uZ1ByZXNzQ2FuQ2xpY2sgPSBOTzsKKworICAgICAg
ICBSZXRhaW5QdHI8TlNBcnJheTxfV0tFbGVtZW50QWN0aW9uICo+PiBkZWZhdWx0QWN0aW9uc0Zy
b21Bc3Npc3RhbnQgPSBbX2FjdGlvblNoZWV0QXNzaXN0YW50IGRlZmF1bHRBY3Rpb25zRm9yTGlu
a1NoZWV0OmVsZW1lbnRJbmZvLmdldCgpXTsKKworICAgICAgICAvLyBGSVhNRTogQW5pbWF0ZWQg
aW1hZ2VzIGdvIGhlcmUuCisKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
QkVHSU4KKyAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3Iod2ViVmlldzpwcmV2aWV3aW5nVmlld0NvbnRyb2xsZXJGb3JFbGVtZW50OmRlZmF1bHRBY3Rp
b25zOildKSB7CisgICAgICAgICAgICBhdXRvIGRlZmF1bHRBY3Rpb25zID0gd2tQcmV2aWV3QWN0
aW9uc0Zyb21FbGVtZW50QWN0aW9ucyhkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQuZ2V0KCks
IGVsZW1lbnRJbmZvLmdldCgpKTsKKyAgICAgICAgICAgIGF1dG8gcHJldmlld0VsZW1lbnRJbmZv
ID0gYWRvcHROUyhbW1dLUHJldmlld0VsZW1lbnRJbmZvIGFsbG9jXSBfaW5pdFdpdGhMaW5rVVJM
OnVybF0pOworICAgICAgICAgICAgcHJldmlld1ZpZXdDb250cm9sbGVyID0gW3VpRGVsZWdhdGUg
d2ViVmlldzpfd2ViVmlldyBwcmV2aWV3aW5nVmlld0NvbnRyb2xsZXJGb3JFbGVtZW50OnByZXZp
ZXdFbGVtZW50SW5mby5nZXQoKSBkZWZhdWx0QWN0aW9uczpkZWZhdWx0QWN0aW9uc107CisgICAg
ICAgIH0gZWxzZSBpZiAoW3VpRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihf
d2ViVmlldzpwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JVUkw6ZGVmYXVsdEFjdGlvbnM6ZWxlbWVu
dEluZm86KV0pCisgICAgICAgICAgICBwcmV2aWV3Vmlld0NvbnRyb2xsZXIgPSBbdWlEZWxlZ2F0
ZSBfd2ViVmlldzpfd2ViVmlldyBwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JVUkw6dXJsIGRlZmF1
bHRBY3Rpb25zOmRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudC5nZXQoKSBlbGVtZW50SW5mbzpl
bGVtZW50SW5mby5nZXQoKV07CisgICAgICAgIGVsc2UgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6cHJldmlld1ZpZXdDb250cm9sbGVyRm9yVVJM
OildKQorICAgICAgICAgICAgcHJldmlld1ZpZXdDb250cm9sbGVyID0gW3VpRGVsZWdhdGUgX3dl
YlZpZXc6X3dlYlZpZXcgcHJldmlld1ZpZXdDb250cm9sbGVyRm9yVVJMOnVybF07CisgICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorCisjaWYgVVNFKERBVEFfREVURUNU
T1JTX0ZPUl9ERUZBVUxUX1BSRVZJRVcpCisgICAgICAgIC8vIFByZXZpb3VzbHksIFVJUHJldmll
d0l0ZW1Db250cm9sbGVyIHdvdWxkIGRldGVjdCB0aGUgY2FzZSB3aGVyZSB0aGVyZSB3YXMgbm8g
cHJldmlld1ZpZXdDb250cm9sbGVyCisgICAgICAgIC8vIGFuZCBjcmVhdGUgb25lLiBXZSBuZWVk
IHRvIHJlcGxpY2F0ZSB0aGlzIGNvZGUgZm9yIHRoZSBuZXcgQVBJLgorICAgICAgICBpZiAoIXBy
ZXZpZXdWaWV3Q29udHJvbGxlcikgeworICAgICAgICAgICAgYXV0byBkZENvbnRleHRNZW51QWN0
aW9uQ2xhc3MgPSBnZXRERENvbnRleHRNZW51QWN0aW9uQ2xhc3MoKTsKKyAgICAgICAgICAgIGlm
IChbZGRDb250ZXh0TWVudUFjdGlvbkNsYXNzIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
Y29udGV4dE1lbnVDb25maWd1cmF0aW9uRm9yVVJMOmlkZW50aWZpZXI6c2VsZWN0ZWRUZXh0OnJl
c3VsdHM6aW5WaWV3OmNvbnRleHQ6bWVudUlkZW50aWZpZXI6KV0pIHsKKyAgICAgICAgICAgICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgICAgICAgICAgICAgTlNEaWN0aW9u
YXJ5ICpjb250ZXh0ID0gW3NlbGYgZGF0YURldGVjdGlvbkNvbnRleHRGb3JQb3NpdGlvbkluZm9y
bWF0aW9uOl9wb3NpdGlvbkluZm9ybWF0aW9uXTsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8
VUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24+IGRhdGFEZXRlY3RvcnNSZXN1bHQgPSBbZGRDb250
ZXh0TWVudUFjdGlvbkNsYXNzIGNvbnRleHRNZW51Q29uZmlndXJhdGlvbkZvclVSTDp1cmwgaWRl
bnRpZmllcjpfcG9zaXRpb25JbmZvcm1hdGlvbi5kYXRhRGV0ZWN0b3JJZGVudGlmaWVyIHNlbGVj
dGVkVGV4dDpzZWxmLnNlbGVjdGVkVGV4dCByZXN1bHRzOl9wb3NpdGlvbkluZm9ybWF0aW9uLmRh
dGFEZXRlY3RvclJlc3VsdHMuZ2V0KCkgaW5WaWV3OnNlbGYgY29udGV4dDpjb250ZXh0IG1lbnVJ
ZGVudGlmaWVyOm5pbF07CisgICAgICAgICAgICAgICAgaWYgKF9zaG93TGlua1ByZXZpZXdzICYm
IGRhdGFEZXRlY3RvcnNSZXN1bHQgJiYgZGF0YURldGVjdG9yc1Jlc3VsdC5nZXQoKS5wcmV2aWV3
UHJvdmlkZXIpCisgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0TWVudUxlZ2FjeVByZXZpZXdD
b250cm9sbGVyID0gZGF0YURldGVjdG9yc1Jlc3VsdC5nZXQoKS5wcmV2aWV3UHJvdmlkZXIoKTsK
KyAgICAgICAgICAgICAgICBpZiAoZGF0YURldGVjdG9yc1Jlc3VsdCAmJiBkYXRhRGV0ZWN0b3Jz
UmVzdWx0LmdldCgpLmFjdGlvblByb3ZpZGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
bWVudUVsZW1lbnRzID0gbWVudUVsZW1lbnRzRnJvbVByZXZpZXdPckRlZmF1bHRzKG5pbCwgZGVm
YXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50LCBlbGVtZW50SW5mbyk7CisgICAgICAgICAgICAgICAg
ICAgIF9jb250ZXh0TWVudUxlZ2FjeU1lbnUgPSBkYXRhRGV0ZWN0b3JzUmVzdWx0LmdldCgpLmFj
dGlvblByb3ZpZGVyKG1lbnVFbGVtZW50cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGF1dG8gbWVudVRpdGxl
ID0gdGl0bGVGb3JNZW51KHRydWUsIF9zaG93TGlua1ByZXZpZXdzLCB1cmwsIF9wb3NpdGlvbklu
Zm9ybWF0aW9uLnRpdGxlKTsKKyAgICAgICAgX2NvbnRleHRNZW51TGVnYWN5TWVudSA9IG1lbnVG
cm9tUHJldmlld09yRGVmYXVsdHMocHJldmlld1ZpZXdDb250cm9sbGVyLCBkZWZhdWx0QWN0aW9u
c0Zyb21Bc3Npc3RhbnQsIGVsZW1lbnRJbmZvLCBtZW51VGl0bGUpOworCisgICAgfSBlbHNlIGlm
IChfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0ltYWdlKSB7CisgICAgICAgIE5TVVJMICpuc1VSTCA9
IChOU1VSTCAqKXVybDsKKyAgICAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gaW1hZ2VJbmZv
OworICAgICAgICBBU1NFUlQoX3Bvc2l0aW9uSW5mb3JtYXRpb24uaW1hZ2UpOworICAgICAgICBh
dXRvIGNnSW1hZ2UgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi5pbWFnZS0+bWFrZUNHSW1hZ2VDb3B5
KCk7CisgICAgICAgIGF1dG8gdWlJbWFnZSA9IGFkb3B0TlMoW1tVSUltYWdlIGFsbG9jXSBpbml0
V2l0aENHSW1hZ2U6Y2dJbWFnZS5nZXQoKV0pOworCisgICAgICAgIGlmIChbdWlEZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmFsdGVybmF0ZVVSTEZyb21JbWFn
ZTp1c2VySW5mbzopXSkgeworICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbzsKKyAg
ICAgICAgICAgIG5zVVJMID0gW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgYWx0ZXJuYXRl
VVJMRnJvbUltYWdlOnVpSW1hZ2UuZ2V0KCkgdXNlckluZm86JnVzZXJJbmZvXTsKKyAgICAgICAg
ICAgIGltYWdlSW5mbyA9IHVzZXJJbmZvOworICAgICAgICB9CisKKyAgICAgICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6d2lsbFByZXZpZXdJbWFnZVdpdGhVUkw6
KV0pCisgICAgICAgICAgICBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyB3aWxsUHJldmll
d0ltYWdlV2l0aFVSTDpfcG9zaXRpb25JbmZvcm1hdGlvbi5pbWFnZVVSTF07CisKKyAgICAgICAg
UmV0YWluUHRyPE5TQXJyYXk8X1dLRWxlbWVudEFjdGlvbiAqPj4gZGVmYXVsdEFjdGlvbnNGcm9t
QXNzaXN0YW50ID0gW19hY3Rpb25TaGVldEFzc2lzdGFudCBkZWZhdWx0QWN0aW9uc0ZvckltYWdl
U2hlZXQ6ZWxlbWVudEluZm8uZ2V0KCldOworCisgICAgICAgIGlmIChpbWFnZUluZm8gJiYgW3Vp
RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpwcmV2aWV3Vmll
d0NvbnRyb2xsZXJGb3JJbWFnZTphbHRlcm5hdGVVUkw6ZGVmYXVsdEFjdGlvbnM6ZWxlbWVudElu
Zm86KV0pCisgICAgICAgICAgICBwcmV2aWV3Vmlld0NvbnRyb2xsZXIgPSBbdWlEZWxlZ2F0ZSBf
d2ViVmlldzpfd2ViVmlldyBwcmV2aWV3Vmlld0NvbnRyb2xsZXJGb3JJbWFnZTp1aUltYWdlLmdl
dCgpIGFsdGVybmF0ZVVSTDpuc1VSTCBkZWZhdWx0QWN0aW9uczpkZWZhdWx0QWN0aW9uc0Zyb21B
c3Npc3RhbnQuZ2V0KCkgZWxlbWVudEluZm86ZWxlbWVudEluZm8uZ2V0KCldOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBwcmV2aWV3Vmlld0NvbnRyb2xsZXIgPSBbW1dLSW1hZ2VQcmV2aWV3
Vmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpjZ0ltYWdlIGRlZmF1bHRBY3Rp
b25zOmRlZmF1bHRBY3Rpb25zRnJvbUFzc2lzdGFudC5nZXQoKSBlbGVtZW50SW5mbzplbGVtZW50
SW5mby5nZXQoKV07CisgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAor
CisgICAgICAgIGF1dG8gbWVudVRpdGxlID0gdGl0bGVGb3JNZW51KGZhbHNlLCBfc2hvd0xpbmtQ
cmV2aWV3cywgdXJsLCBfcG9zaXRpb25JbmZvcm1hdGlvbi50aXRsZSk7CisgICAgICAgIF9jb250
ZXh0TWVudUxlZ2FjeU1lbnUgPSBtZW51RnJvbVByZXZpZXdPckRlZmF1bHRzKHByZXZpZXdWaWV3
Q29udHJvbGxlciwgZGVmYXVsdEFjdGlvbnNGcm9tQXNzaXN0YW50LCBlbGVtZW50SW5mbywgbWVu
dVRpdGxlKTsKKyAgICB9CisKKyAgICBfY29udGV4dE1lbnVMZWdhY3lQcmV2aWV3Q29udHJvbGxl
ciA9IF9zaG93TGlua1ByZXZpZXdzID8gcHJldmlld1ZpZXdDb250cm9sbGVyIDogbnVsbHB0cjsK
K30KKworLSAoVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKiljb250ZXh0TWVudUludGVyYWN0
aW9uOihVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBjb25maWd1cmF0aW9u
Rm9yTWVudUF0TG9jYXRpb246KENHUG9pbnQpbG9jYXRpb24KK3sKKyAgICAvLyBSZXF1aXJlZCB0
byBjb25mb3JtIHRvIFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbkRlbGVnYXRlLCBidXQgU1BJIHZl
cnNpb24gc2hvdWxkIGJlIGNhbGxlZCBpbnN0ZWFkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpX2NvbnRleHRNZW51SW50ZXJhY3Rpb246
KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIGNvbmZpZ3VyYXRpb25Gb3JN
ZW51QXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4pKFVJQ29u
dGV4dE1lbnVDb25maWd1cmF0aW9uICopKWNvbXBsZXRpb24KK3sKKyAgICBpZiAoIV93ZWJWaWV3
KQorICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworCisgICAgaWYgKCFfd2ViVmlldy5j
b25maWd1cmF0aW9uLl9sb25nUHJlc3NBY3Rpb25zRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb24obmlsKTsKKworICAgIGNvbnN0IGF1dG8gcG9zaXRpb24gPSBbaW50ZXJhY3Rpb24g
bG9jYXRpb25JblZpZXc6c2VsZl07CisgICAgV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9u
UmVxdWVzdCByZXF1ZXN0IHsgV2ViQ29yZTo6cm91bmRlZEludFBvaW50KHBvc2l0aW9uKSB9Owor
ICAgIHJlcXVlc3QuaW5jbHVkZVNuYXBzaG90ID0gdHJ1ZTsKKyAgICByZXF1ZXN0LmluY2x1ZGVM
aW5rSW5kaWNhdG9yID0gdHJ1ZTsKKworICAgIFtzZWxmIGRvQWZ0ZXJQb3NpdGlvbkluZm9ybWF0
aW9uVXBkYXRlOlt3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLQ29udGVudFZpZXc+KHNlbGYpLCBj
b21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pXSAoV2ViS2l0OjpJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbikgeworICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFr
U2VsZi5nZXQoKTsKKyAgICAgICAgaWYgKCFzdHJvbmdTZWxmKQorICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb24obmlsKTsKKyAgICAgICAgW3N0cm9uZ1NlbGYgY29udGludWVDb250ZXh0TWVu
dUludGVyYWN0aW9uOmNvbXBsZXRpb24uZ2V0KCldOworICAgIH0gZm9yUmVxdWVzdDpyZXF1ZXN0
XTsKK30KKworLSAodm9pZCljb250aW51ZUNvbnRleHRNZW51SW50ZXJhY3Rpb246KHZvaWQoXiko
VUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKikpY29tcGxldGlvbgoreworICAgIGlmICghX3Bv
c2l0aW9uSW5mb3JtYXRpb24udG91Y2hDYWxsb3V0RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb24obmlsKTsKKworICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNMaW5rICYm
ICFfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0ltYWdlICYmICFfcG9zaXRpb25JbmZvcm1hdGlvbi5p
c0F0dGFjaG1lbnQpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uKG5pbCk7CisKKyAgICBVUkwg
bGlua1VSTCA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLnVybDsKKworICAgIGlmIChfcG9zaXRpb25J
bmZvcm1hdGlvbi5pc0xpbmsgJiYgbGlua1VSTC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBj
b21wbGV0aW9uKG5pbCk7CisKKyAgICBhdXRvIHVpRGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxpZDxX
S1VJRGVsZWdhdGVQcml2YXRlPj4oX3dlYlZpZXcuVUlEZWxlZ2F0ZSk7CisgICAgaWYgKCF1aURl
bGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworCisgICAgaWYgKG5lZWRz
RGVwcmVjYXRlZFByZXZpZXdBUEkodWlEZWxlZ2F0ZSkpIHsKKworICAgICAgICBpZiAoX3Bvc2l0
aW9uSW5mb3JtYXRpb24uaXNMaW5rKSB7CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19CRUdJTgorICAgICAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRQcmV2aWV3RWxlbWVudDopXSkgeworICAg
ICAgICAgICAgICAgIGF1dG8gcHJldmlld0VsZW1lbnRJbmZvID0gYWRvcHROUyhbW1dLUHJldmll
d0VsZW1lbnRJbmZvIGFsbG9jXSBfaW5pdFdpdGhMaW5rVVJMOmxpbmtVUkxdKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIVt1aURlbGVnYXRlIHdlYlZpZXc6X3dlYlZpZXcgc2hvdWxkUHJldmlld0Vs
ZW1lbnQ6cHJldmlld0VsZW1lbnRJbmZvLmdldCgpXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb24obmlsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorCisgICAgICAgICAgICAvLyBGSVhNRTogU3VwcG9y
dCBKYXZhU2NyaXB0IHVybHMgaGVyZS4gQnV0IG1ha2Ugc3VyZSB0aGV5IGRvbid0IHNob3cgYSBw
cmV2aWV3LgorICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUwNTcyMjgzPgorICAgICAg
ICAgICAgaWYgKCFsaW5rVVJMLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgeworI2lmIEVOQUJM
RShEQVRBX0RFVEVDVElPTikKKyAgICAgICAgICAgICAgICBpZiAoIVdlYkNvcmU6OkRhdGFEZXRl
Y3Rpb246OmNhbkJlUHJlc2VudGVkQnlEYXRhRGV0ZWN0b3JzKGxpbmtVUkwpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbihuaWwpOworI2VuZGlmCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBfY29udGV4dE1lbnVMZWdhY3lQcmV2aWV3Q29udHJvbGxl
ciA9IG51bGxwdHI7CisgICAgICAgIF9jb250ZXh0TWVudUxlZ2FjeU1lbnUgPSBudWxscHRyOwor
ICAgICAgICBfY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRhID0gTk87CisKKyAgICAg
ICAgVUlDb250ZXh0TWVudUFjdGlvblByb3ZpZGVyIGFjdGlvbk1lbnVQcm92aWRlciA9IFt3ZWFr
U2VsZiA9IFdlYWtPYmpDUHRyPFdLQ29udGVudFZpZXc+KHNlbGYpXSAoTlNBcnJheTxVSU1lbnVF
bGVtZW50ICo+ICpzdWdnZXN0ZWRBY3Rpb25zKSAtPiBVSU1lbnUgKiB7CisgICAgICAgICAgICBh
dXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgICAgIGlmICghc3Ryb25n
U2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgaWYgKCFzdHJv
bmdTZWxmLT5fY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRhKQorICAgICAgICAgICAg
ICAgIFtzdHJvbmdTZWxmIGFzc2lnbkxlZ2FjeURhdGFGb3JDb250ZXh0TWVudUludGVyYWN0aW9u
XTsKKworICAgICAgICAgICAgcmV0dXJuIHN0cm9uZ1NlbGYtPl9jb250ZXh0TWVudUxlZ2FjeU1l
bnUuZ2V0KCk7CisgICAgICAgIH07CisKKyAgICAgICAgVUlDb250ZXh0TWVudUNvbnRlbnRQcmV2
aWV3UHJvdmlkZXIgY29udGVudFByZXZpZXdQcm92aWRlciA9IFt3ZWFrU2VsZiA9IFdlYWtPYmpD
UHRyPFdLQ29udGVudFZpZXc+KHNlbGYpXSAoKSAtPiBVSVZpZXdDb250cm9sbGVyICogeworICAg
ICAgICAgICAgYXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgICAgICBp
ZiAoIXN0cm9uZ1NlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAg
IGlmICghc3Ryb25nU2VsZi0+X2NvbnRleHRNZW51SGFzUmVxdWVzdGVkTGVnYWN5RGF0YSkKKyAg
ICAgICAgICAgICAgICBbc3Ryb25nU2VsZiBhc3NpZ25MZWdhY3lEYXRhRm9yQ29udGV4dE1lbnVJ
bnRlcmFjdGlvbl07CisKKyAgICAgICAgICAgIHJldHVybiBzdHJvbmdTZWxmLT5fY29udGV4dE1l
bnVMZWdhY3lQcmV2aWV3Q29udHJvbGxlci5nZXQoKTsKKyAgICAgICAgfTsKKworICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIHByb3ZpZGUgYW4gaWRlbnRpZmllciBhbmQgQVNTRVJUIGluIGRl
bGVnYXRlcyBpZiB3ZSBkb24ndCBtYXRjaD8KKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24oW1VJ
Q29udGV4dE1lbnVDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb25XaXRoSWRlbnRpZmllcjpuaWwg
cHJldmlld1Byb3ZpZGVyOmNvbnRlbnRQcmV2aWV3UHJvdmlkZXIgYWN0aW9uUHJvdmlkZXI6YWN0
aW9uTWVudVByb3ZpZGVyXSk7CisgICAgfQorCisgICAgYXV0byBjb21wbGV0aW9uQmxvY2sgPSBt
YWtlQmxvY2tQdHIoW2NvbXBsZXRpb24gPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbiksIGxpbmtV
UkwgPSBXVEZNb3ZlKGxpbmtVUkwpLCB3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLQ29udGVudFZp
ZXc+KHNlbGYpXSAoVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb25Gcm9t
V0tVSURlbGVnYXRlKSBtdXRhYmxlIHsKKworICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFr
U2VsZi5nZXQoKTsKKyAgICAgICAgaWYgKCFzdHJvbmdTZWxmKQorICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb24obmlsKTsKKworICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25Gcm9tV0tVSURl
bGVnYXRlKSB7CisKKyAgICAgICAgICAgIHN0cm9uZ1NlbGYtPl9jb250ZXh0TWVudUVsZW1lbnRJ
bmZvID0gbmlsOworCisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gb2Jq
ZWN0IHdlIG1pZ2h0IHdhbnQgdG8gc2hvdyBhIGNvbnRleHQgbWVudSBmb3IsIGJ1dCB0aGUKKyAg
ICAgICAgICAgIC8vIGNsaWVudCB3YXMgdW5hYmxlIHRvIGhhbmRsZSBpdC4gQmVmb3JlIGdpdmlu
ZyB1cCwgd2UgYXNrIERhdGFEZXRlY3RvcnMuCisKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04p
CisgICAgICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBKYXZhU2NyaXB0IHVybHMgaGVyZS4gQnV0
IG1ha2Ugc3VyZSB0aGV5IGRvbid0IHNob3cgYSBwcmV2aWV3LgorICAgICAgICAgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzUwNTcyMjgzPgorICAgICAgICAgICAgaWYgKCFsaW5rVVJMLnByb3RvY29s
SXNJbkhUVFBGYW1pbHkoKSAmJiAhV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6Y2FuQmVQcmVzZW50
ZWRCeURhdGFEZXRlY3RvcnMobGlua1VSTCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb24obmlsKTsKKworICAgICAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
ICAgICAgICAgICAgYXV0byBkZENvbnRleHRNZW51QWN0aW9uQ2xhc3MgPSBnZXRERENvbnRleHRN
ZW51QWN0aW9uQ2xhc3MoKTsKKyAgICAgICAgICAgIGlmIChbZGRDb250ZXh0TWVudUFjdGlvbkNs
YXNzIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29udGV4dE1lbnVDb25maWd1cmF0aW9u
V2l0aFVSTDppblZpZXc6Y29udGV4dDptZW51SWRlbnRpZmllcjopXSkgeworICAgICAgICAgICAg
ICAgIE5TRGljdGlvbmFyeSAqY29udGV4dCA9IFtzdHJvbmdTZWxmIGRhdGFEZXRlY3Rpb25Db250
ZXh0Rm9yUG9zaXRpb25JbmZvcm1hdGlvbjpzdHJvbmdTZWxmLT5fcG9zaXRpb25JbmZvcm1hdGlv
bl07CisgICAgICAgICAgICAgICAgVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3Vy
YXRpb25Gcm9tREQgPSBbZGRDb250ZXh0TWVudUFjdGlvbkNsYXNzIGNvbnRleHRNZW51Q29uZmln
dXJhdGlvbkZvclVSTDpsaW5rVVJMIGlkZW50aWZpZXI6c3Ryb25nU2VsZi0+X3Bvc2l0aW9uSW5m
b3JtYXRpb24uZGF0YURldGVjdG9ySWRlbnRpZmllciBzZWxlY3RlZFRleHQ6W3N0cm9uZ1NlbGYg
c2VsZWN0ZWRUZXh0XSByZXN1bHRzOnN0cm9uZ1NlbGYtPl9wb3NpdGlvbkluZm9ybWF0aW9uLmRh
dGFEZXRlY3RvclJlc3VsdHMuZ2V0KCkgaW5WaWV3OnN0cm9uZ1NlbGYuZ2V0KCkgY29udGV4dDpj
b250ZXh0IG1lbnVJZGVudGlmaWVyOm5pbF07CisgICAgICAgICAgICAgICAgaWYgKHN0cm9uZ1Nl
bGYtPl9zaG93TGlua1ByZXZpZXdzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbihjb25maWd1cmF0aW9uRnJvbUREKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbihbVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbldpdGhJZGVudGlm
aWVyOltjb25maWd1cmF0aW9uRnJvbUREIGlkZW50aWZpZXJdIHByZXZpZXdQcm92aWRlcjpbY29u
ZmlndXJhdGlvbkZyb21ERCBwcmV2aWV3UHJvdmlkZXJdIGFjdGlvblByb3ZpZGVyOltjb25maWd1
cmF0aW9uRnJvbUREIGFjdGlvblByb3ZpZGVyXV0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb24obmlsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlkPE5TQ29weWluZz4gaWRl
bnRpZmllciA9IFtjb25maWd1cmF0aW9uRnJvbVdLVUlEZWxlZ2F0ZSBpZGVudGlmaWVyXTsKKyAg
ICAgICAgVUlDb250ZXh0TWVudUNvbnRlbnRQcmV2aWV3UHJvdmlkZXIgY29udGVudFByZXZpZXdQ
cm92aWRlciA9IFtjb25maWd1cmF0aW9uRnJvbVdLVUlEZWxlZ2F0ZSBwcmV2aWV3UHJvdmlkZXJd
OworICAgICAgICBVSUNvbnRleHRNZW51QWN0aW9uUHJvdmlkZXIgYWN0aW9uTWVudVByb3ZpZGVy
ID0gW2NvbmZpZ3VyYXRpb25Gcm9tV0tVSURlbGVnYXRlIGFjdGlvblByb3ZpZGVyXTsKKworICAg
ICAgICBhdXRvIGFjdGlvblByb3ZpZGVyV3JhcHBlciA9IFthY3Rpb25Qcm92aWRlckZyb21VSURl
bGVnYXRlID0gbWFrZUJsb2NrUHRyKGFjdGlvbk1lbnVQcm92aWRlciksIHdlYWtTZWxmID0gV1RG
TW92ZSh3ZWFrU2VsZildIChOU0FycmF5PFVJTWVudUVsZW1lbnQgKj4gKnN1Z2dlc3RlZEFjdGlv
bnMpIC0+IFVJTWVudSAqIHsKKyAgICAgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxm
LmdldCgpOworICAgICAgICAgICAgaWYgKCFzdHJvbmdTZWxmKQorICAgICAgICAgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICAgICAgICAgIGF1dG8gZWxlbWVudEluZm8gPSBhZG9wdE5TKFtbX1dL
QWN0aXZhdGVkRWxlbWVudEluZm8gYWxsb2NdIF9pbml0V2l0aEludGVyYWN0aW9uSW5mb3JtYXRp
b25BdFBvc2l0aW9uOnN0cm9uZ1NlbGYtPl9wb3NpdGlvbkluZm9ybWF0aW9uXSk7CisgICAgICAg
ICAgICBSZXRhaW5QdHI8TlNBcnJheTxfV0tFbGVtZW50QWN0aW9uICo+PiBkZWZhdWx0QWN0aW9u
c0Zyb21Bc3Npc3RhbnQgPSBzdHJvbmdTZWxmLT5fcG9zaXRpb25JbmZvcm1hdGlvbi5pc0xpbmsg
PyBbc3Ryb25nU2VsZi0+X2FjdGlvblNoZWV0QXNzaXN0YW50IGRlZmF1bHRBY3Rpb25zRm9yTGlu
a1NoZWV0OmVsZW1lbnRJbmZvLmdldCgpXSA6IFtzdHJvbmdTZWxmLT5fYWN0aW9uU2hlZXRBc3Np
c3RhbnQgZGVmYXVsdEFjdGlvbnNGb3JJbWFnZVNoZWV0OmVsZW1lbnRJbmZvLmdldCgpXTsKKwor
ICAgICAgICAgICAgYXV0byBtZW51RWxlbWVudHMgPSBtZW51RWxlbWVudHNGcm9tUHJldmlld09y
RGVmYXVsdHMobmlsLCBkZWZhdWx0QWN0aW9uc0Zyb21Bc3Npc3RhbnQsIGVsZW1lbnRJbmZvKTsK
KworICAgICAgICAgICAgaWYgKGFjdGlvblByb3ZpZGVyRnJvbVVJRGVsZWdhdGUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGFjdGlvblByb3ZpZGVyRnJvbVVJRGVsZWdhdGUobWVudUVsZW1lbnRz
KTsKKworICAgICAgICAgICAgYXV0byB0aXRsZSA9IHRpdGxlRm9yTWVudShzdHJvbmdTZWxmLT5f
cG9zaXRpb25JbmZvcm1hdGlvbi5pc0xpbmssIHN0cm9uZ1NlbGYtPl9zaG93TGlua1ByZXZpZXdz
LCBzdHJvbmdTZWxmLT5fcG9zaXRpb25JbmZvcm1hdGlvbi51cmwsIHN0cm9uZ1NlbGYtPl9wb3Np
dGlvbkluZm9ybWF0aW9uLnRpdGxlKTsKKyAgICAgICAgICAgIHJldHVybiBbVUlNZW51IG1lbnVX
aXRoVGl0bGU6dGl0bGUgY2hpbGRyZW46bWVudUVsZW1lbnRzXTsKKyAgICAgICAgfTsKKworICAg
ICAgICBjb21wbGV0aW9uKFtVSUNvbnRleHRNZW51Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
V2l0aElkZW50aWZpZXI6aWRlbnRpZmllciBwcmV2aWV3UHJvdmlkZXI6Y29udGVudFByZXZpZXdQ
cm92aWRlciBhY3Rpb25Qcm92aWRlcjphY3Rpb25Qcm92aWRlcldyYXBwZXJdKTsKKyAgICB9KTsK
KworICAgIF9jb250ZXh0TWVudUVsZW1lbnRJbmZvID0gd3JhcHBlcihBUEk6OkNvbnRleHRNZW51
RWxlbWVudEluZm86OmNyZWF0ZShfcG9zaXRpb25JbmZvcm1hdGlvbikpOworICAgIGlmIChbdWlE
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmNvbnRleHRNZW51
Q29uZmlndXJhdGlvbkZvckVsZW1lbnQ6Y29tcGxldGlvbkhhbmRsZXI6KV0pIHsKKyAgICAgICAg
YXV0byBjaGVja2VyID0gV2ViS2l0OjpDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVh
dGUodWlEZWxlZ2F0ZSwgQHNlbGVjdG9yKF93ZWJWaWV3OmNvbnRleHRNZW51Q29uZmlndXJhdGlv
bkZvckVsZW1lbnQ6Y29tcGxldGlvbkhhbmRsZXI6KSk7CisgICAgICAgIFt1aURlbGVnYXRlIF93
ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51Q29uZmlndXJhdGlvbkZvckVsZW1lbnQ6X2NvbnRl
eHRNZW51RWxlbWVudEluZm8uZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtj
b21wbGV0aW9uQmxvY2sgPSBXVEZNb3ZlKGNvbXBsZXRpb25CbG9jayksIGNoZWNrZXIgPSBXVEZN
b3ZlKGNoZWNrZXIpXSAoVUlDb250ZXh0TWVudUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxs
ZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjaGVja2VyLT5kaWRD
YWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25CbG9jayhjb25m
aWd1cmF0aW9uKTsKKyAgICAgICAgfSkuZ2V0KCldOworICAgIH0gZWxzZSBpZiAoX3Bvc2l0aW9u
SW5mb3JtYXRpb24uaXNMaW5rICYmIFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3Iod2ViVmlldzpjb250ZXh0TWVudUNvbmZpZ3VyYXRpb25Gb3JFbGVtZW50OmNvbXBsZXRp
b25IYW5kbGVyOildKSB7CisgICAgICAgIGF1dG8gY2hlY2tlciA9IFdlYktpdDo6Q29tcGxldGlv
bkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKHVpRGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJWaWV3
OmNvbnRleHRNZW51Q29uZmlndXJhdGlvbkZvckVsZW1lbnQ6Y29tcGxldGlvbkhhbmRsZXI6KSk7
CisgICAgICAgIFt1aURlbGVnYXRlIHdlYlZpZXc6X3dlYlZpZXcgY29udGV4dE1lbnVDb25maWd1
cmF0aW9uRm9yRWxlbWVudDpfY29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKSBjb21wbGV0aW9u
SGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25CbG9jayA9IFdURk1vdmUoY29tcGxldGlv
bkJsb2NrKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChVSUNvbnRleHRNZW51Q29uZmln
dXJhdGlvbiAqY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBs
ZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAg
ICAgY29tcGxldGlvbkJsb2NrKGNvbmZpZ3VyYXRpb24pOworICAgICAgICB9KS5nZXQoKV07Cisg
ICAgfSBlbHNlCisgICAgICAgIGNvbXBsZXRpb25CbG9jayhuaWwpOwogfQogCitzdGF0aWMgUmV0
YWluUHRyPFVJSW1hZ2U+IHVpSW1hZ2VGb3JJbWFnZShXZWJDb3JlOjpJbWFnZSogaW1hZ2UpCit7
CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGF1dG8gY2dJbWFn
ZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpOworICAgIGlmICghY2dJbWFnZSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHJldHVybiBhZG9wdE5TKFtbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhD
R0ltYWdlOmNnSW1hZ2UuZ2V0KCldKTsKK30KKworLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1l
cmdlZCB3aXRoIGNyZWF0ZVRhcmdldGVkRHJhZ1ByZXZpZXcgaW4gRHJhZ0Ryb3BJbnRlcmFjdGlv
blN0YXRlLgorc3RhdGljIFJldGFpblB0cjxVSVRhcmdldGVkUHJldmlldz4gY3JlYXRlVGFyZ2V0
ZWRQcmV2aWV3KFVJSW1hZ2UgKmltYWdlLCBVSVZpZXcgKnJvb3RWaWV3LCBVSVZpZXcgKnByZXZp
ZXdDb250YWluZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZnJhbWVJblJvb3RWaWV3Q29v
cmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiBjbGlwcGluZ1JlY3Rz
SW5GcmFtZUNvb3JkaW5hdGVzLCBVSUNvbG9yICpiYWNrZ3JvdW5kQ29sb3IpCit7CisgICAgaWYg
KGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVzLmlzRW1wdHkoKSB8fCAhaW1hZ2UpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWVJbkNvbnRhaW5lckNv
b3JkaW5hdGVzID0gW3Jvb3RWaWV3IGNvbnZlcnRSZWN0OmZyYW1lSW5Sb290Vmlld0Nvb3JkaW5h
dGVzIHRvVmlldzpwcmV2aWV3Q29udGFpbmVyXTsKKyAgICBpZiAoZnJhbWVJbkNvbnRhaW5lckNv
b3JkaW5hdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFdlYkNvcmU6
OkZsb2F0U2l6ZSBzY2FsaW5nUmF0aW8gPSBmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMuc2l6
ZSgpIC8gZnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMuc2l6ZSgpOworICAgIE5TTXV0YWJsZUFy
cmF5ICpjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcy5zaXpl
KCldOworCisgICAgZm9yIChhdXRvIHJlY3QgOiBjbGlwcGluZ1JlY3RzSW5GcmFtZUNvb3JkaW5h
dGVzKSB7CisgICAgICAgIHJlY3Quc2NhbGUoc2NhbGluZ1JhdGlvKTsKKyAgICAgICAgW2NsaXBw
aW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVX
aXRoQ0dSZWN0OnJlY3RdXTsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8VUlQcmV2aWV3UGFyYW1l
dGVycz4gcGFyYW1ldGVyczsKKyAgICBpZiAoY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3Jk
aW5hdGVzLmNvdW50KQorICAgICAgICBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW1VJUHJldmlld1Bh
cmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExpbmVSZWN0czpjbGlwcGluZ1JlY3RWYWx1ZXNJ
bkZyYW1lQ29vcmRpbmF0ZXNdKTsKKyAgICBlbHNlCisgICAgICAgIHBhcmFtZXRlcnMgPSBhZG9w
dE5TKFtbVUlQcmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5pdF0pOworCisgICAgaWYgKGJhY2tn
cm91bmRDb2xvcikKKyAgICAgICAgW3BhcmFtZXRlcnMgc2V0QmFja2dyb3VuZENvbG9yOmJhY2tn
cm91bmRDb2xvcl07CisKKyAgICBDR1BvaW50IGNlbnRlckluQ29udGFpbmVyQ29vcmRpbmF0ZXMg
PSB7IENHUmVjdEdldE1pZFgoZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzKSwgQ0dSZWN0R2V0
TWlkWShmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMpIH07CisgICAgYXV0byB0YXJnZXQgPSBh
ZG9wdE5TKFtbVUlQcmV2aWV3VGFyZ2V0IGFsbG9jXSBpbml0V2l0aENvbnRhaW5lcjpwcmV2aWV3
Q29udGFpbmVyIGNlbnRlcjpjZW50ZXJJbkNvbnRhaW5lckNvb3JkaW5hdGVzXSk7CisKKyAgICBh
dXRvIGltYWdlVmlldyA9IGFkb3B0TlMoW1tVSUltYWdlVmlldyBhbGxvY10gaW5pdFdpdGhJbWFn
ZTppbWFnZV0pOworICAgIFtpbWFnZVZpZXcgc2V0RnJhbWU6ZnJhbWVJbkNvbnRhaW5lckNvb3Jk
aW5hdGVzXTsKKyAgICByZXR1cm4gYWRvcHROUyhbW1VJVGFyZ2V0ZWRQcmV2aWV3IGFsbG9jXSBp
bml0V2l0aFZpZXc6aW1hZ2VWaWV3LmdldCgpIHBhcmFtZXRlcnM6cGFyYW1ldGVycy5nZXQoKSB0
YXJnZXQ6dGFyZ2V0LmdldCgpXSk7Cit9CisKKy0gKFVJVGFyZ2V0ZWRQcmV2aWV3ICopX3Rhcmdl
dGVkUHJldmlldworeworICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5pc0xpbmsgJiYgX3Bv
c2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UpIHsKKyAgICAgICAg
W3NlbGYgX3N0YXJ0U3VwcHJlc3NpbmdTZWxlY3Rpb25Bc3Npc3RhbnRGb3JSZWFzb246V2ViS2l0
OjpJbnRlcmFjdGlvbklzSGFwcGVuaW5nXTsKKworICAgICAgICBhdXRvIGluZGljYXRvciA9IF9w
b3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3I7CisgICAgICAgIGF1dG8gdGV4dEluZGlj
YXRvckltYWdlID0gdWlJbWFnZUZvckltYWdlKGluZGljYXRvci5jb250ZW50SW1hZ2UuZ2V0KCkp
OworCisgICAgICAgIHJldHVybiBjcmVhdGVUYXJnZXRlZFByZXZpZXcodGV4dEluZGljYXRvcklt
YWdlLmdldCgpLCBzZWxmLCBzZWxmLnVuc2NhbGVkVmlldywgaW5kaWNhdG9yLnRleHRCb3VuZGlu
Z1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGluZGljYXRvci50ZXh0UmVjdHNJbkJvdW5kaW5n
UmVjdENvb3JkaW5hdGVzLCBbVUlDb2xvciBjb2xvcldpdGhDR0NvbG9yOmNhY2hlZENHQ29sb3Io
aW5kaWNhdG9yLmVzdGltYXRlZEJhY2tncm91bmRDb2xvcildKS5hdXRvcmVsZWFzZSgpOworICAg
IH0KKworICAgIGlmICgoX3Bvc2l0aW9uSW5mb3JtYXRpb24uaXNBdHRhY2htZW50IHx8IF9wb3Np
dGlvbkluZm9ybWF0aW9uLmlzSW1hZ2UpICYmIF9wb3NpdGlvbkluZm9ybWF0aW9uLmltYWdlKSB7
CisgICAgICAgIFtzZWxmIF9zdGFydFN1cHByZXNzaW5nU2VsZWN0aW9uQXNzaXN0YW50Rm9yUmVh
c29uOldlYktpdDo6SW50ZXJhY3Rpb25Jc0hhcHBlbmluZ107CisKKyAgICAgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBfcG9zaXRpb25JbmZvcm1hdGlvbi5pbWFnZS0+bWFrZUNH
SW1hZ2VDb3B5KCk7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBhZG9wdE5TKFtbVUlJbWFnZSBhbGxv
Y10gaW5pdFdpdGhDR0ltYWdlOmNnSW1hZ2UuZ2V0KCldKTsKKworICAgICAgICByZXR1cm4gY3Jl
YXRlVGFyZ2V0ZWRQcmV2aWV3KGltYWdlLmdldCgpLCBzZWxmLCBzZWxmLnVuc2NhbGVkVmlldywg
X3Bvc2l0aW9uSW5mb3JtYXRpb24uYm91bmRzLCB7IH0sIG5pbCkuYXV0b3JlbGVhc2UoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbmlsOworfQorCistIChVSVRhcmdldGVkUHJldmlldyAqKWNvbnRl
eHRNZW51SW50ZXJhY3Rpb246KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9u
IHByZXZpZXdGb3JIaWdobGlnaHRpbmdNZW51V2l0aENvbmZpZ3VyYXRpb246KFVJQ29udGV4dE1l
bnVDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbgoreworICAgIHJldHVybiBbc2VsZiBfdGFy
Z2V0ZWRQcmV2aWV3XTsKK30KKworLSAodm9pZCljb250ZXh0TWVudUludGVyYWN0aW9uV2lsbFBy
ZXNlbnQ6KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uCit7CisgICAgaWYg
KCFfd2ViVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gdWlEZWxlZ2F0ZSA9IHN0YXRp
Y19jYXN0PGlkPFdLVUlEZWxlZ2F0ZVByaXZhdGU+Pihfd2ViVmlldy5VSURlbGVnYXRlKTsKKyAg
ICBpZiAoIXVpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoW3VpRGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51V2lsbFByZXNl
bnRGb3JFbGVtZW50OildKQorICAgICAgICBbdWlEZWxlZ2F0ZSB3ZWJWaWV3Ol93ZWJWaWV3IGNv
bnRleHRNZW51V2lsbFByZXNlbnRGb3JFbGVtZW50Ol9jb250ZXh0TWVudUVsZW1lbnRJbmZvLmdl
dCgpXTsKKyAgICBlbHNlIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKF93ZWJWaWV3OmNvbnRleHRNZW51V2lsbFByZXNlbnRGb3JFbGVtZW50OildKSB7CisgICAg
ICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgIFt1aURlbGVn
YXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51V2lsbFByZXNlbnRGb3JFbGVtZW50Ol9j
b250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpXTsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfRU5ECisgICAgfQorfQorCistIChVSVRhcmdldGVkUHJldmlldyAqKWNvbnRl
eHRNZW51SW50ZXJhY3Rpb246KFVJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9u
IHByZXZpZXdGb3JEaXNtaXNzaW5nTWVudVdpdGhDb25maWd1cmF0aW9uOihVSUNvbnRleHRNZW51
Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24KK3sKKyAgICByZXR1cm4gW3NlbGYgX3Rhcmdl
dGVkUHJldmlld107Cit9CisKKy0gKHZvaWQpY29udGV4dE1lbnVJbnRlcmFjdGlvbjooVUlDb250
ZXh0TWVudUludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gd2lsbENvbW1pdFdpdGhBbmltYXRvcjoo
aWQ8VUlDb250ZXh0TWVudUludGVyYWN0aW9uQ29tbWl0QW5pbWF0aW5nPilhbmltYXRvcgorewor
ICAgIGlmICghX3dlYlZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIFtzZWxmIF9zdG9wU3Vw
cHJlc3NpbmdTZWxlY3Rpb25Bc3Npc3RhbnRGb3JSZWFzb246V2ViS2l0OjpJbnRlcmFjdGlvbklz
SGFwcGVuaW5nXTsKKworICAgIGF1dG8gdWlEZWxlZ2F0ZSA9IHN0YXRpY19jYXN0PGlkPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+Pihfd2ViVmlldy5VSURlbGVnYXRlKTsKKyAgICBpZiAoIXVpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChuZWVkc0RlcHJlY2F0ZWRQcmV2aWV3QVBJ
KHVpRGVsZWdhdGUpKSB7CisKKyAgICAgICAgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmlzSW1h
Z2UpIHsKKyAgICAgICAgICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKF93ZWJWaWV3OmNvbW1pdFByZXZpZXdlZEltYWdlV2l0aFVSTDopXSkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IGF1dG8mIGltYWdlVVJMID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24uaW1h
Z2VVUkw7CisgICAgICAgICAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSB8fCAhKGltYWdl
VVJMLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCBpbWFnZVVSTC5wcm90b2NvbElzKCJkYXRh
IikpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgICAgICAgICBbdWlEZWxlZ2F0
ZSBfd2ViVmlldzpfd2ViVmlldyBjb21taXRQcmV2aWV3ZWRJbWFnZVdpdGhVUkw6KE5TVVJMICop
aW1hZ2VVUkxdOworICAgICAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0VORAorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmll
dzpjb21taXRQcmV2aWV3aW5nVmlld0NvbnRyb2xsZXI6KV0pIHsKKyAgICAgICAgICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgICAgICBpZiAoYXV0byB2aWV3
Q29udHJvbGxlciA9IF9jb250ZXh0TWVudUxlZ2FjeVByZXZpZXdDb250cm9sbGVyLmdldCgpKQor
ICAgICAgICAgICAgICAgIFt1aURlbGVnYXRlIHdlYlZpZXc6X3dlYlZpZXcgY29tbWl0UHJldmll
d2luZ1ZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVyXTsKKyAgICAgICAgICAgIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3dlYlZpZXc6Y29tbWl0UHJldmlld2VkVmlld0NvbnRyb2xsZXI6KV0pIHsKKyAgICAgICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgICAgICBpZiAoYXV0
byB2aWV3Q29udHJvbGxlciA9IF9jb250ZXh0TWVudUxlZ2FjeVByZXZpZXdDb250cm9sbGVyLmdl
dCgpKQorICAgICAgICAgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGNvbW1p
dFByZXZpZXdlZFZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVyXTsKKyAgICAgICAgICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChbdWlEZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVGb3JFbGVtZW50
OndpbGxDb21taXRXaXRoQW5pbWF0b3I6KV0pCisgICAgICAgIFt1aURlbGVnYXRlIHdlYlZpZXc6
X3dlYlZpZXcgY29udGV4dE1lbnVGb3JFbGVtZW50Ol9jb250ZXh0TWVudUVsZW1lbnRJbmZvLmdl
dCgpIHdpbGxDb21taXRXaXRoQW5pbWF0b3I6YW5pbWF0b3JdOworICAgIGVsc2UgaWYgKFt1aURl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y29udGV4dE1lbnVG
b3JFbGVtZW50OndpbGxDb21taXRXaXRoQW5pbWF0b3I6KV0pIHsKKyAgICAgICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6
X3dlYlZpZXcgY29udGV4dE1lbnVGb3JFbGVtZW50Ol9jb250ZXh0TWVudUVsZW1lbnRJbmZvLmdl
dCgpIHdpbGxDb21taXRXaXRoQW5pbWF0b3I6YW5pbWF0b3JdOworICAgICAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAgICB9Cit9CisKKy0gKHZvaWQpY29udGV4dE1lbnVJ
bnRlcmFjdGlvbkRpZEVuZDooVUlDb250ZXh0TWVudUludGVyYWN0aW9uICopaW50ZXJhY3Rpb24K
K3sKKyAgICBpZiAoIV93ZWJWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiBfc3Rv
cFN1cHByZXNzaW5nU2VsZWN0aW9uQXNzaXN0YW50Rm9yUmVhc29uOldlYktpdDo6SW50ZXJhY3Rp
b25Jc0hhcHBlbmluZ107CisKKyAgICAvLyBGSVhNRTogVGhpcyBkZWxlZ2F0ZSBpcyBiZWluZyBj
YWxsZWQgbW9yZSB0aGFuIG9uY2UgYnkgVUlLaXQuIDxyZGFyOi8vcHJvYmxlbS81MTU1MDI5MT4K
KyAgICAvLyBUaGlzIGNvbmRpdGlvbmFsIGF2b2lkcyB0aGUgV0tVSURlbGVnYXRlIGJlaW5nIGNh
bGxlZCB0d2ljZSB0b28uCisgICAgaWYgKCFfY29udGV4dE1lbnVFbGVtZW50SW5mbykgeworICAg
ICAgICBhdXRvIHVpRGVsZWdhdGUgPSBzdGF0aWNfY2FzdDxpZDxXS1VJRGVsZWdhdGVQcml2YXRl
Pj4oX3dlYlZpZXcuVUlEZWxlZ2F0ZSk7CisgICAgICAgIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4dE1lbnVEaWRFbmRGb3JFbGVtZW50
OildKQorICAgICAgICAgICAgW3VpRGVsZWdhdGUgd2ViVmlldzpfd2ViVmlldyBjb250ZXh0TWVu
dURpZEVuZEZvckVsZW1lbnQ6X2NvbnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCldOworICAgICAg
ICBlbHNlIGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJW
aWV3OmNvbnRleHRNZW51RGlkRW5kRm9yRWxlbWVudDopXSkgeworICAgICAgICAgICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgICAgIFt1aURlbGVnYXRlIF93
ZWJWaWV3Ol93ZWJWaWV3IGNvbnRleHRNZW51RGlkRW5kRm9yRWxlbWVudDpfY29udGV4dE1lbnVF
bGVtZW50SW5mby5nZXQoKV07CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKKyAgICAgICAgfQorICAgIH0KKworICAgIF9jb250ZXh0TWVudUxlZ2FjeVByZXZp
ZXdDb250cm9sbGVyID0gbnVsbHB0cjsKKyAgICBfY29udGV4dE1lbnVMZWdhY3lNZW51ID0gbnVs
bHB0cjsKKyAgICBfY29udGV4dE1lbnVIYXNSZXF1ZXN0ZWRMZWdhY3lEYXRhID0gTk87CisgICAg
X2NvbnRleHRNZW51RWxlbWVudEluZm8gPSBudWxscHRyOworfQorCitAZW5kCisKKyNlbHNlCisK
K0BpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRWaWV3IChXS0ludGVyYWN0aW9uUHJldmlldykKKwog
LSAodm9pZClfcmVnaXN0ZXJQcmV2aWV3CiB7CiAgICAgaWYgKCFfd2ViVmlldy5hbGxvd3NMaW5r
UHJldmlldykKQEAgLTc3NjYsNyArODMzNyw3IEBAIHN0YXRpYyBOU1N0cmluZyAqcHJldmlld0lk
ZW50aWZpZXJGb3JFbGVtZW50QWN0aW9uKF9XS0VsZW1lbnRBY3Rpb24gKmFjdGlvbikKIAogQGVu
ZAogCi0jZW5kaWYgLy8gVVNFKExPTkdfUFJFU1NfRk9SX0xJTktfUFJFVklFVykKKyNlbmRpZiAv
LyBVU0UoVUlDT05URVhUTUVOVSkKIAogI2VuZGlmIC8vIEhBVkUoTElOS19QUkVWSUVXKQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>