<?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>85817</bug_id>
          
          <creation_ts>2012-05-07 12:48:32 -0700</creation_ts>
          <short_desc>[Qt] Implement WebProcess based input method event handling</short_desc>
          <delta_ts>2014-02-03 03:20:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Michael Brüning">michael.bruning</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>kenneth</cc>
    
    <cc>lauro.neto</cc>
    
    <cc>michael.bruning</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>617838</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-05-07 12:48:32 -0700</bug_when>
    <thetext>The current handling of Qt Input Method Events (IMEs) tries to map the event parameters to either a SetComposition or ConfirmComposition message to the web process. Unfortunately this mapping is not entirely correct and breaks with certain virtual keyboards that use the IME interface.

A very concrete example: Imagine a virtual keyboard that makes suggestions based on what you write. So far you&apos;ve written &quot;Pla&quot; and the keyboard suggests &quot;Planet&quot;. The incomplete &quot;Pla&quot; sequence however is not a composition. Upon accepting the suggestion we receive an IME with &quot;Planet&quot; as commit string and (-3, 3) as replacementStart/Length.

In Qt the controls that respond the IMEs implement roughly the following &quot;algorithm&quot;:

    (1) Remove the text referred to by replacementStart/Length
    (2) Insert the commit string
    (3) Set text selection as specified via QInputMethodEvent::Selection entry from attributes()
    (4) Set preeditText() as composition along with specified attributes

Any of the above steps are optional if their argument is not present - for example step (2) is a no-op if the commit string is empty. All of the above steps should appear as one operation in terms of undo/redo to the user. Step (1) and (2) can easily be combined into one edit operation.

I suggest we implement this algorithm in one shot on the web process side, to reduce the number of messages to be sent. I suggest to map the above steps to the WebCore::Editor interface as follows:

    * Step (1) and (2) become: Set replacementStart/Length as selection, convert it to composition with setComposition(selectedText()), confirmComposition(commitString)
    * Step (4) becomes a call to setComposition(preeditText)


On the UIProcess side we need to act on the IME synchronously, which means we need to apply the provided change simultaneously and immediately on the cached selection text (modify surroundingText, cursorPosition, etc.). We should also generate an integer ID, pass it as parameter with the IME message to the WebProcess and let the WebProcess send it back to us with one final EditorStateChanged message after applying steps (1)-(4). Until that EditorStateChanged message with the expected ID has arrived, we should ignore all incoming EditorStateChanged messages or at least not inform the input method about any updates, to avoid providing an intermediate (and thus incorrect) state to the input method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618426</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-05-08 02:00:28 -0700</bug_when>
    <thetext>I&apos;ll start on a patch based on the branch from Simon&apos;s github.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658420</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-06-27 00:41:10 -0700</bug_when>
    <thetext>Michael, is this still on your TODO or would you prefer we remove it from the 5.0.0 tracking?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658502</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-06-27 02:53:44 -0700</bug_when>
    <thetext>This is still on my todo and I&apos;ll continue working on this. I&apos;ll post a patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673620</commentid>
    <comment_count>4</comment_count>
      <attachid>153289</attachid>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-07-19 10:12:50 -0700</bug_when>
    <thetext>Created attachment 153289
Work in progress patch.

I have been working on this on and off and since I am going on holidays, I wanted to post it here.

This is the current work in progress as of today, so it is not yet 100% ready for review. It seems to be working so far, although the unit test needs to be revisited. 

I am not 100% sure whether the UI process side is 100% correct and necessary. 

Also, there is still more editorState updates (multiply per event) dispatched, which I would like to solve, but haven&apos;t really found a good way to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770458</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-11-19 01:13:34 -0800</bug_when>
    <thetext>Taking this off the 5.0.0 blocker because it shouldn&apos;t block the release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>975448</commentid>
    <comment_count>6</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2014-02-03 03:20:46 -0800</bug_when>
    <thetext>=== Bulk closing of Qt bugs ===

If you believe that this bug report is still relevant for a non-Qt port of webkit.org, please re-open it and remove [Qt] from the summary.

If you believe that this is still an important QtWebKit bug, please fill a new report at https://bugreports.qt-project.org and add a link to this issue. See http://qt-project.org/wiki/ReportingBugsInQt for additional guidelines.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153289</attachid>
            <date>2012-07-19 10:12:50 -0700</date>
            <delta_ts>2012-07-19 10:12:50 -0700</delta_ts>
            <desc>Work in progress patch.</desc>
            <filename>0001-IME-patch.patch</filename>
            <type>text/plain</type>
            <size>32341</size>
            <attacher name="Michael Brüning">michael.bruning</attacher>
            
              <data encoding="base64">RnJvbSA2NGQ1MzZhZmRlNDY2MWI1YWU2ZDc0ZGM0YTIzZmNhNjk5MDQ3YjIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/TWljaGFlbD0yMEJyPUMzPUJDbmluZz89IDxt
aWNoYWVsLmJydW5pbmdAbm9raWEuY29tPgpEYXRlOiBXZWQsIDQgSnVsIDIwMTIgMTY6MjY6Mjkg
KzAyMDAKU3ViamVjdDogW1BBVENIXSBJTUUtcGF0Y2gKCi0tLQogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYzICsrKysrKysrKysrCiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwICAgICAgICAgICAgICB8ICAgIDUgKwog
U291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmggICAgICAgICAgICAgICAgfCAgICAy
ICsKIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcCAgICAgIHwg
ICA1NCArKysrKysrKysKIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0
LmggICAgICAgIHwgICAgOCArKwogU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0SW5wdXRNZXRo
b2RFdmVudC5jcHAgICAgfCAgMTE3ICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvcXQvUXRJbnB1dE1ldGhvZEV2ZW50LmggICAgICB8ICAgNjUgKysrKysrKysrKysK
IFNvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
MiArCiAuLi4vcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHAgICB8
ICAgNDQgKysrKysrKysKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
ICAgICAgICAgIHwgICAgNyArCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmggICAgICAgICAgICB8ICAgIDYgKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZUV2ZW50SGFuZGxlci5jcHAgfCAgIDY1ICstLS0tLS0tLS0tCiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwICAgICB8ICAgMjkgKysrKysKIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCAgICAgIHwgICAgNCArCiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oICAgICAgICB8ICAgIDYgKwogLi4u
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gfCAgICAxICsK
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwIHwgICA4
NyArKysrKysrKysrKysrKy0KIDE3IGZpbGVzIGNoYW5nZWQsIDUwMiBpbnNlcnRpb25zKCspLCA2
MyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
cXQvUXRJbnB1dE1ldGhvZEV2ZW50LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9xdC9RdElucHV0TWV0aG9kRXZlbnQuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkMmE5YzQ0
Li5kNmQ4ZmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTItMDctMTkgIE1pY2hh
ZWwgQnLDvG5pbmcgIDxtaWNoYWVsLmJydW5pbmdAbm9raWEuY29tPgorCisgICAgICAgIFtRdF0g
SW1wbGVtZW50IFdlYlByb2Nlc3MgYmFzZWQgaW5wdXQgbWV0aG9kIGV2ZW50IGhhbmRsaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTgxNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW1wbGVt
ZW50cyBXZWJQcm9jZXNzIGJhc2VkIGlucHV0IG1ldGhvZCBldmVudCBoYW5kbGluZyBmb3IgUXQu
CisgICAgICAgIElucHV0IG1ldGhvZCBldmVudHMgYXJlIHNlbnQgdG8gdGhlIFdlYlByb2Nlc3Mg
aW1tZWRpYXRlbHkgYW5kIHRoZQorICAgICAgICBsb2NhbCBjb3B5IG9mIHRoZSB0ZXh0IGlucHV0
IHN0YXRlIGluIHRoZSBVSVByb2Nlc3MgaXMgdGVtcG9yYXJpbHkgdXBkYXRlZC4KKyAgICAgICAg
RXZlbnRzIGFyZSBhc3NpZ25lZCBhbiBJRCB1cG9uIGJlaW5nIHNlbnQgYW5kIHRoZSB0ZXh0IGlu
cHV0IHN0YXRlIGlzIG5vdAorICAgICAgICB1cGRhdGVkIHdpdGggZXZlbnRzIGZyb20gdGhlIFdl
YlByb2Nlc3MgdW50aWwgdGhlIGlucHV0IG1ldGhvZCBldmVudCBpZGVudGlmaWVkCisgICAgICAg
IGJ5IHRoZSBjdXJyZW50IElEIGhhcyBiZWVuIHByb2Nlc3NlZC4KKworICAgICAgICAqIFNoYXJl
ZC9FZGl0b3JTdGF0ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvclN0YXRlOjplbmNvZGUp
OgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFy
ZWQvRWRpdG9yU3RhdGUuaDoKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yU3RhdGU6OkVkaXRvclN0
YXRlKToKKyAgICAgICAgKEVkaXRvclN0YXRlKToKKyAgICAgICAgKiBTaGFyZWQvcXQvQXJndW1l
bnRDb2RlcnNRdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgIChD
b3JlSVBDKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQv
cXQvQXJndW1lbnRDb2RlcnNRdC5oOgorICAgICAgICAqIFNoYXJlZC9xdC9RdElucHV0TWV0aG9k
RXZlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKENvcmVJUEMpOgorICAgICAgICAoQ29yZUlQQzo6
OjplbmNvZGUpOgorICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6UXRJbnB1dE1ldGhvZEV2ZW50OjpRdElucHV0TWV0aG9kRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpRdElucHV0TWV0aG9kRXZlbnQ6OmVuY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6OlF0SW5wdXRNZXRob2RFdmVudDo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFy
ZWQvcXQvUXRJbnB1dE1ldGhvZEV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAoQ29yZUlQQyk6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoUXRJbnB1dE1ldGhvZEV2ZW50KToKKyAgICAgICAg
KiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vi
dmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHA6CisgICAgICAgICh0c3RfUVF1aWNrV2ViVmlldzo6
aW5wdXRNZXRob2QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6ZWRpdG9yU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViUGFnZVBy
b3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVJbnB1dE1ldGhv
ZEV2ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmlucHV0TWV0aG9kRXZlbnQpOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjplZGl0b3JTdGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJQYWdlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvcXQvV2ViUGFnZVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Q29t
cG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjppbnB1dE1ldGhvZEV2ZW50KToK
KyAgICAgICAgKFdlYktpdCk6CisKIDIwMTItMDctMTcgIENocmlzdG9waGUgRHVtZXogIDxjaHJp
c3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBSZXBsYWNlIDAgYnkgTlVM
TCBpbiBwdWJsaWMgaGVhZGVycyBkb2N1bWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRv
clN0YXRlLmNwcAppbmRleCA2ZTQ0YTBmLi40MTg1NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9F
ZGl0b3JTdGF0ZS5jcHAKQEAgLTUwLDYgKzUwLDcgQEAgdm9pZCBFZGl0b3JTdGF0ZTo6ZW5jb2Rl
KENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyLT5l
bmNvZGUoaW5wdXRNZXRob2RIaW50cyk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHNlbGVjdGVkVGV4
dCk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHN1cnJvdW5kaW5nVGV4dCk7CisgICAgZW5jb2Rlci0+
ZW5jb2RlKGlucHV0TWV0aG9kRXZlbnRJZCk7CiAjZW5kaWYKIH0KIApAQCAtMTAwLDYgKzEwMSwx
MCBAQCBib29sIEVkaXRvclN0YXRlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KQogCiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
cmVzdWx0LnN1cnJvdW5kaW5nVGV4dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC5pbnB1dE1ldGhvZEV2ZW50SWQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICNlbmRpZgogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9FZGl0b3JTdGF0ZS5oCmluZGV4IGFjMWQ3OTMuLjYxNWUxZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9FZGl0b3JTdGF0ZS5oCkBAIC00Niw2ICs0Niw3IEBAIHN0cnVjdCBFZGl0b3JTdGF0ZSB7CiAg
ICAgICAgICwgY3Vyc29yUG9zaXRpb24oMCkKICAgICAgICAgLCBhbmNob3JQb3NpdGlvbigwKQog
ICAgICAgICAsIGlucHV0TWV0aG9kSGludHMoMCkKKyAgICAgICAgLCBpbnB1dE1ldGhvZEV2ZW50
SWQoMCkKICNlbmRpZgogICAgIHsKICAgICB9CkBAIC03Miw2ICs3Myw3IEBAIHN0cnVjdCBFZGl0
b3JTdGF0ZSB7CiAKICAgICBXVEY6OlN0cmluZyBzZWxlY3RlZFRleHQ7CiAgICAgV1RGOjpTdHJp
bmcgc3Vycm91bmRpbmdUZXh0OworICAgIHVpbnQ2NF90IGlucHV0TWV0aG9kRXZlbnRJZDsKICNl
bmRpZgogCiAgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAKaW5kZXgg
Yzg5YmY0NC4uMjM2MzJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0Fy
Z3VtZW50Q29kZXJzUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVu
dENvZGVyc1F0LmNwcApAQCAtOTUsNCArOTUsNTggQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkRyYWdEYXRhPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRHJhZ0RhdGEK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBBcmd1bWVudENvZGVyPFFWYXJpYW50Pjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgUVZhcmlhbnQmIHZhcmlhbnQpCit7
CisgICAgUVZhcmlhbnQ6OlR5cGUgdHlwZSA9IHZhcmlhbnQudHlwZSgpOworICAgIGVuY29kZXIt
PmVuY29kZShzdGF0aWNfY2FzdDxpbnQzMl90Pih0eXBlKSk7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBRVmFyaWFudDo6SW50OgorICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odmFyaWFudC50b0ludCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUVZhcmlhbnQ6OlVJbnQ6CisgICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1
aW50MzJfdD4odmFyaWFudC50b1VJbnQoKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFW
YXJpYW50OjpTdHJpbmc6CisgICAgICAgIGVuY29kZXItPmVuY29kZShXVEY6OlN0cmluZyh2YXJp
YW50LnRvU3RyaW5nKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
RkFUQUwoIlVuc3VwcG9ydGVkIFFWYXJpYW50IHR5cGUgcHJvdmlkZWQgaW4gQ29yZUlQQyBlbmNv
ZGluZy4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEFyZ3VtZW50Q29kZXI8
UVZhcmlhbnQ+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBRVmFyaWFudCYgdmFy
aWFudCkKK3sKKyAgICBpbnQzMl90IGludFR5cGU7CisgICAgdWludDMyX3QgdWludFR5cGU7Cisg
ICAgV1RGOjpTdHJpbmcgc3RyaW5nVHlwZTsKKworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGlu
dFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUVZhcmlhbnQ6OlR5cGUgdHlwZSA9
IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihpbnRUeXBlKTsKKworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgUVZhcmlhbnQ6OkludDoKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoaW50VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHZhcmlhbnQg
PSBRVmFyaWFudChpbnRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRVmFyaWFudDo6
VUludDoKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodWludFR5cGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YXJpYW50ID0gUVZhcmlhbnQodWludFR5cGUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFFWYXJpYW50OjpTdHJpbmc6CisgICAgICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKHN0cmluZ1R5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB2YXJpYW50ID0gUVZhcmlhbnQoUVN0cmluZyhzdHJpbmdUeXBlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEZBVEFMKCJVbnN1cHBvcnRlZCBRVmFyaWFu
dCB0eXBlIHByb3ZpZGVkIGluIENvcmVJUEMgZGVjb2RpbmcuIik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L3F0L0FyZ3VtZW50Q29kZXJzUXQuaAppbmRleCA0ZDE1Y2MwLi5iMTNmNTU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmgKQEAgLTI0LDYgKzI0LDEwIEBA
CiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKIAor
UVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRVmFyaWFudDsKK1FUX0VORF9OQU1FU1BBQ0UKKwog
bmFtZXNwYWNlIENvcmVJUEMgewogCiB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25z
dCBXZWJDb3JlOjpEcmFnRGF0YSYpOwpAQCAtMzQsNiArMzgsMTAgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0YT4gewogICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpEcmFnRGF0YSYpOwogfTsKIAordGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxRVmFyaWFudD4geworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBRVmFyaWFudCYpOworICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXIqLCBRVmFyaWFudCYpOworfTsKIH0KIAogI2VuZGlmIC8v
IEFyZ3VtZW50Q29kZXJzUXRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0
L1F0SW5wdXRNZXRob2RFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXRJbnB1
dE1ldGhvZEV2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzcz
NWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0SW5wdXRN
ZXRob2RFdmVudC5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyoKKyogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdO
VQorKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoK
KyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRlIHRvCisqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlF0SW5wdXRNZXRob2RFdmVudC5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMu
aCIKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc1F0LmgiCisKK25hbWVzcGFjZSBDb3JlSVBDIHsK
Kwordm9pZCBBcmd1bWVudENvZGVyPFFJbnB1dE1ldGhvZEV2ZW50OjpBdHRyaWJ1dGU+OjplbmNv
ZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBRSW5wdXRNZXRob2RFdmVudDo6QXR0
cmlidXRlJiBhdHRyKQoreworICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDxpbnQzMl90
PihhdHRyLnR5cGUpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoYXR0ci5zdGFydCk7CisgICAgZW5j
b2Rlci0+ZW5jb2RlKGF0dHIubGVuZ3RoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoYXR0ci52YWx1
ZSk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxRSW5wdXRNZXRob2RFdmVudDo6QXR0cmlidXRl
Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUUlucHV0TWV0aG9kRXZlbnQ6OkF0
dHJpYnV0ZSYgYXR0cikKK3sKKyAgICBpbnQzMl90IGF0dHJUeXBlOworICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKGF0dHJUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXR0ci50
eXBlID0gc3RhdGljX2Nhc3Q8UUlucHV0TWV0aG9kRXZlbnQ6OkF0dHJpYnV0ZVR5cGU+KGF0dHJU
eXBlKTsKKworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGF0dHIuc3RhcnQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoYXR0ci5sZW5ndGgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoYXR0ci52YWx1ZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBDb3JlSVBDCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitRdElucHV0TWV0aG9kRXZl
bnQ6OlF0SW5wdXRNZXRob2RFdmVudCgpCisgICAgOiByZXBsYWNlbWVudFN0YXJ0KDApCisgICAg
LCByZXBsYWNlbWVudExlbmd0aCgwKQoreworfQorCitRdElucHV0TWV0aG9kRXZlbnQ6OlF0SW5w
dXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVudCogZXYpCisgICAgOiBwcmVlZGl0U3RyaW5n
KGV2LT5wcmVlZGl0U3RyaW5nKCkpCisgICAgLCByZXBsYWNlbWVudFN0YXJ0KGV2LT5yZXBsYWNl
bWVudFN0YXJ0KCkpCisgICAgLCByZXBsYWNlbWVudExlbmd0aChldi0+cmVwbGFjZW1lbnRMZW5n
dGgoKSkKKyAgICAsIGNvbW1pdFN0cmluZyhldi0+Y29tbWl0U3RyaW5nKCkpCisgICAgLCBhdHRy
aWJ1dGVzKGV2LT5hdHRyaWJ1dGVzKCkpCit7Cit9CisKK3ZvaWQgUXRJbnB1dE1ldGhvZEV2ZW50
OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXItPmVuY29kZShldmVudElkKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUocHJlZWRpdFN0
cmluZyk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHJlcGxhY2VtZW50U3RhcnQpOworICAgIGVuY29k
ZXItPmVuY29kZShyZXBsYWNlbWVudExlbmd0aCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGNvbW1p
dFN0cmluZyk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PGludDMyX3Q+KGF0dHJp
YnV0ZXMuY291bnQoKSkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5jb3Vu
dCgpOyArK2kpCisgICAgICAgIGVuY29kZXItPmVuY29kZShhdHRyaWJ1dGVzW2ldKTsKK30KKwor
Ym9vbCBRdElucHV0TWV0aG9kRXZlbnQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
IGRlY29kZXIsIFF0SW5wdXRNZXRob2RFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoZXZlbnQuZXZlbnRJZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWRlY29kZXItPmRlY29kZShldmVudC5wcmVlZGl0U3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGV2ZW50LnJlcGxhY2VtZW50U3RhcnQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZXZlbnQucmVw
bGFjZW1lbnRMZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoZXZlbnQuY29tbWl0U3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaW50MzJfdCBhdHRyQ291bnQ7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoYXR0ckNvdW50
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUUxpc3Q8UUlucHV0TWV0aG9kRXZlbnQ6
OkF0dHJpYnV0ZT4gYXR0cmlidXRlczsKKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBhdHRy
Q291bnQ7ICsraSkgeworICAgICAgICAvLyAjIyMgRklYTUU6IER1bW15IGNvbnN0cnVjdG9yIGNh
bGwuIFJlbW92ZSBvbmNlIFF0IGhhcyBkZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgICBRSW5w
dXRNZXRob2RFdmVudDo6QXR0cmlidXRlIGF0dHIoUUlucHV0TWV0aG9kRXZlbnQ6OkN1cnNvciwg
MCwgMCwgUVZhcmlhbnQoKSk7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGF0dHIpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdHRyaWJ1dGVzIDw8IGF0dHI7Cisg
ICAgfQorCisgICAgZXZlbnQuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvcXQvUXRJbnB1dE1ldGhvZEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvcXQvUXRJbnB1dE1ldGhvZEV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uODc2ZDJmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9x
dC9RdElucHV0TWV0aG9kRXZlbnQuaApAQCAtMCwwICsxLDY1IEBACisvKgorKiBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisq
CisqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2Vl
IHRoZSBHTlUKKyogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bworKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyoKKyovCisKKyNpZm5kZWYgUXRJbnB1dE1l
dGhvZEV2ZW50X2gKKyNkZWZpbmUgUXRJbnB1dE1ldGhvZEV2ZW50X2gKKworI2luY2x1ZGUgIkFy
Z3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorCisjaW5jbHVk
ZSA8UUlucHV0TWV0aG9kRXZlbnQ+CisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKK2NsYXNzIEFy
Z3VtZW50RW5jb2RlcjsKK2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxRSW5wdXRNZXRob2RFdmVudDo6QXR0cmlidXRlPiB7CisgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFFJbnB1dE1ldGhvZEV2ZW50
OjpBdHRyaWJ1dGUmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
UUlucHV0TWV0aG9kRXZlbnQ6OkF0dHJpYnV0ZSYpOworfTsKKworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworc3RydWN0IFF0SW5wdXRNZXRob2RFdmVudCB7CisgICAgUXRJbnB1dE1ldGhvZEV2
ZW50KCk7CisgICAgUXRJbnB1dE1ldGhvZEV2ZW50KFFJbnB1dE1ldGhvZEV2ZW50Kik7CisKKyAg
ICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25zdDsKKyAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgUXRJbnB1dE1ldGhvZEV2
ZW50Jik7CisKKyAgICB1aW50NjRfdCBldmVudElkOworICAgIFdURjo6U3RyaW5nIHByZWVkaXRT
dHJpbmc7CisKKyAgICBpbnQzMl90IHJlcGxhY2VtZW50U3RhcnQ7CisgICAgaW50MzJfdCByZXBs
YWNlbWVudExlbmd0aDsKKyAgICBXVEY6OlN0cmluZyBjb21taXRTdHJpbmc7CisKKyAgICBRTGlz
dDxRSW5wdXRNZXRob2RFdmVudDo6QXR0cmlidXRlPiBhdHRyaWJ1dGVzOworfTsKKworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFF0SW5wdXRNZXRob2RFdmVudApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkKaW5kZXggMjVkODk0Zi4uMjJjOTk4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFy
Z2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0xMzksNiArMTM5LDcg
QEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL3F0L1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmgg
XAogICAgIFNoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5oIFwKICAgICBTaGFyZWQvcXQvUXRE
ZWZhdWx0RGF0YUxvY2F0aW9uLmggXAorICAgIFNoYXJlZC9xdC9RdElucHV0TWV0aG9kRXZlbnQu
aCBcCiAgICAgU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oIFwKICAgICBTaGFyZWQvcXQv
UXROZXR3b3JrUmVxdWVzdERhdGEuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5o
IFwKQEAgLTUxNyw2ICs1MTgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBTaGFyZWQvcXQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzUXQuY3BwIFwKICAgICBTaGFyZWQvcXQvV2ViRXZlbnRGYWN0b3J5UXQu
Y3BwIFwKICAgICBTaGFyZWQvcXQvUXREZWZhdWx0RGF0YUxvY2F0aW9uLmNwcCBcCisgICAgU2hh
cmVkL3F0L1F0SW5wdXRNZXRob2RFdmVudC5jcHAgXAogICAgIFNoYXJlZC9xdC9RdE5ldHdvcmtS
ZXBseURhdGEuY3BwIFwKICAgICBTaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuY3BwIFwK
ICAgICBTaGFyZWQvcXQvV2ViVVJMUmVxdWVzdFF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0X3FxdWlja3dl
YnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xcXVpY2t3
ZWJ2aWV3L3RzdF9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRleCBhODE3NzgyLi4xYmZhMTYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FxdWlja3dlYnZp
ZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHAKQEAgLTIwLDYg
KzIwLDcgQEAKICNpbmNsdWRlICIuLi90ZXN0d2luZG93LmgiCiAjaW5jbHVkZSAiLi4vdXRpbC5o
IgogCisjaW5jbHVkZSA8UUlucHV0TWV0aG9kRXZlbnQ+CiAjaW5jbHVkZSA8UVNjb3BlZFBvaW50
ZXI+CiAjaW5jbHVkZSA8UXRRbWwvUVFtbEVuZ2luZT4KICNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0
PgpAQCAtNDAwLDEyICs0MDEsNTUgQEAgdm9pZCB0c3RfUVF1aWNrV2ViVmlldzo6dHJhbnNwYXJl
bnRXZWJWaWV3cygpCiB2b2lkIHRzdF9RUXVpY2tXZWJWaWV3OjppbnB1dE1ldGhvZCgpCiB7CiAg
ICAgUVF1aWNrV2ViVmlldyogdmlldyA9IHdlYlZpZXcoKTsKKwogICAgIHZpZXctPnNldFVybChR
VXJsOjpmcm9tTG9jYWxGaWxlKFFMYXRpbjFTdHJpbmcoVEVTVFNfU09VUkNFX0RJUiAiL2h0bWwv
aW5wdXRtZXRob2QuaHRtbCIpKSk7CiAgICAgUVZFUklGWSh3YWl0Rm9yTG9hZFN1Y2NlZWRlZCh2
aWV3KSk7CisgICAgdmlldy0+c2V0VmlzaWJsZSh0cnVlKTsKKyAgICB2aWV3LT5mb3JjZUFjdGl2
ZUZvY3VzKCk7CiAKICAgICBRVkVSSUZZKCF2aWV3LT5mbGFncygpLnRlc3RGbGFnKFFRdWlja0l0
ZW06Okl0ZW1BY2NlcHRzSW5wdXRNZXRob2QpKTsKICAgICBydW5KYXZhU2NyaXB0KCJkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnaW5wdXRGaWVsZCcpLmZvY3VzKCk7Iik7CiAgICAgUVZFUklGWSh2
aWV3LT5mbGFncygpLnRlc3RGbGFnKFFRdWlja0l0ZW06Okl0ZW1BY2NlcHRzSW5wdXRNZXRob2Qp
KTsKKworICAgIC8vIFNpbXVsYXRlIGFuIGlucHV0IG1ldGhvZCBldmVudCB0aGF0IGp1c3QgcmVw
bGFjZXMgdGV4dAorICAgIHsKKyAgICAgICAgeworICAgICAgICAgICAgUUlucHV0TWV0aG9kRXZl
bnQgZXZlbnQ7CisgICAgICAgICAgICBldmVudC5zZXRDb21taXRTdHJpbmcoImZvbyIpOworICAg
ICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6c2VuZEV2ZW50KHZpZXcsICZldmVudCk7CisgICAg
ICAgICAgICB3YWl0Rm9yU2lnbmFsKHFBcHAtPmlucHV0TWV0aG9kKCksIFNJR05BTChjdXJzb3JS
ZWN0YW5nbGVDaGFuZ2VkKCkpKTsKKyAgICAgICAgICAgIFFUZXN0OjpxV2FpdCgxMDAwKTsKKwor
ICAgICAgICB9CisKKyAgICAgICAgUUNPTVBBUkUodmlldy0+aW5wdXRNZXRob2RRdWVyeShRdDo6
SW1TdXJyb3VuZGluZ1RleHQpLnRvU3RyaW5nKCksIFFTdHJpbmcoImZvbyIpKTsKKyAgICAgICAg
UUNPTVBBUkUodmlldy0+aW5wdXRNZXRob2RRdWVyeShRdDo6SW1DdXJzb3JQb3NpdGlvbikudG9J
bnQoKSwgMyk7CisKKyAgICAgICAgeworICAgICAgICAgICAgUUlucHV0TWV0aG9kRXZlbnQgZXZl
bnQoImZvbyIsIFFMaXN0PFFJbnB1dE1ldGhvZEV2ZW50OjpBdHRyaWJ1dGU+KCkpOworICAgICAg
ICAgICAgZXZlbnQuc2V0Q29tbWl0U3RyaW5nKCJiYXJiYXoiLCAvKnJlcGxhY2VtZW50U3RhcnQq
LyAtMywgLypyZXBsYWNlbWVudExlbmd0aCovMyk7CisgICAgICAgICAgICBRQ29yZUFwcGxpY2F0
aW9uOjpzZW5kRXZlbnQodmlldywgJmV2ZW50KTsKKyAgICAgICAgICAgIHdhaXRGb3JTaWduYWwo
cUFwcC0+aW5wdXRNZXRob2QoKSwgU0lHTkFMKGN1cnNvclJlY3RhbmdsZUNoYW5nZWQoKSkpOwor
ICAgICAgICAgICAgUVRlc3Q6OnFXYWl0KDEwMDApOworICAgICAgICB9CisKKyAgICAgICAgUUNP
TVBBUkUodmlldy0+aW5wdXRNZXRob2RRdWVyeShRdDo6SW1TdXJyb3VuZGluZ1RleHQpLnRvU3Ry
aW5nKCksIFFTdHJpbmcoImJhcmJheiIpKTsKKyAgICAgICAgUUNPTVBBUkUodmlldy0+aW5wdXRN
ZXRob2RRdWVyeShRdDo6SW1DdXJzb3JQb3NpdGlvbikudG9JbnQoKSwgNik7CisKKworICAgICAg
ICB7CisgICAgICAgICAgICBRSW5wdXRNZXRob2RFdmVudCBldmVudDsKKyAgICAgICAgICAgIGV2
ZW50LnNldENvbW1pdFN0cmluZygiRm9vYmFyIiwgLypyZXBsYWNlbWVudFN0YXJ0Ki8gLTYsIC8q
cmVwbGFjZW1lbnRMZW5ndGgqLzYpOworICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6c2Vu
ZEV2ZW50KHZpZXcsICZldmVudCk7CisgICAgICAgICAgICB3YWl0Rm9yU2lnbmFsKHFBcHAtPmlu
cHV0TWV0aG9kKCksIFNJR05BTChjdXJzb3JSZWN0YW5nbGVDaGFuZ2VkKCkpKTsKKyAgICAgICAg
ICAgIFFUZXN0OjpxV2FpdCgxMDAwKTsKKyAgICAgICAgfQorCisgICAgICAgIFFDT01QQVJFKHZp
ZXctPmlucHV0TWV0aG9kUXVlcnkoUXQ6OkltU3Vycm91bmRpbmdUZXh0KS50b1N0cmluZygpLCBR
U3RyaW5nKCJGb29iYXIiKSk7CisgICAgICAgIFFDT01QQVJFKHZpZXctPmlucHV0TWV0aG9kUXVl
cnkoUXQ6OkltQ3Vyc29yUG9zaXRpb24pLnRvSW50KCksIDYpOworCisgICAgfQorCiAgICAgcnVu
SmF2YVNjcmlwdCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0RmllbGQnKS5ibHVyKCk7
Iik7CiAgICAgUVZFUklGWSghdmlldy0+ZmxhZ3MoKS50ZXN0RmxhZyhRUXVpY2tJdGVtOjpJdGVt
QWNjZXB0c0lucHV0TWV0aG9kKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCmluZGV4IDE3Y2MyZjQuLmI2MTA5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0yMjEsNiArMjIxLDkgQEAgV2ViUGFnZVByb3h5OjpX
ZWJQYWdlUHJveHkoUGFnZUNsaWVudCogcGFnZUNsaWVudCwgUGFzc1JlZlB0cjxXZWJQcm9jZXNz
UHJveHk+IHAKICAgICAsIG1fc2hvdWxkU2VuZEV2ZW50c1N5bmNocm9ub3VzbHkoZmFsc2UpCiAg
ICAgLCBtX3N1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFsc2UpCiAgICAgLCBtX21lZGlhVm9s
dW1lKDEpCisjaWYgUExBVEZPUk0oUVQpCisgICAgLCBtX2N1cnJlbnRJbnB1dE1ldGhvZEV2ZW50
SWQoMCkKKyNlbmRpZgogI2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJKQogICAgICwgbV92
aXNpYmlsaXR5U3RhdGUoUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUpCiAjZW5kaWYKQEAgLTI3
NzQsNiArMjc3NywxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZWRpdG9yU3RhdGVDaGFuZ2VkKGNv
bnN0IEVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSkKICAgICBib29sIGNvdWxkQ2hhbmdlU2VjdXJl
SW5wdXRTdGF0ZSA9IG1fZWRpdG9yU3RhdGUuaXNJblBhc3N3b3JkRmllbGQgIT0gZWRpdG9yU3Rh
dGUuaXNJblBhc3N3b3JkRmllbGQgfHwgbV9lZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc05vbmU7CiAj
ZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKQorICAgIGlmIChlZGl0b3JTdGF0ZS5pbnB1dE1ldGhv
ZEV2ZW50SWQgIT0gbV9jdXJyZW50SW5wdXRNZXRob2RFdmVudElkKQorICAgICAgICByZXR1cm47
ICAgIAorI2VuZGlmCiAgICAgbV9lZGl0b3JTdGF0ZSA9IGVkaXRvclN0YXRlOwogCiAjaWYgUExB
VEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDI5
YTZjNjUuLjQzMzUzMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
QEAgLTE5Miw2ICsxOTIsMTAgQEAgc3RydWN0IFF1ZXVlZFRvdWNoRXZlbnRzIHsKIH07CiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKFFUKQorc3RydWN0IFF0SW5wdXRNZXRob2RFdmVudDsKKyNlbmRp
ZgorCiAvLyBGSVhNRTogTWFrZSBhIHZlcnNpb24gb2YgQ2FsbGJhY2tCYXNlIHdpdGggdGhyZWUg
YXJndW1lbnRzLCBhbmQgZGVmaW5lIFZhbGlkYXRlQ29tbWFuZENhbGxiYWNrIGFzIGEgc3BlY2lh
bGl6YXRpb24uCiBjbGFzcyBWYWxpZGF0ZUNvbW1hbmRDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFj
a0Jhc2UgewogcHVibGljOgpAQCAtMzYxLDYgKzM2NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNl
cnRpZmljYXRlVmVyaWZpY2F0aW9uUmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCBib29s
JiBpZ25vcmVFcnJvcnMpOwogICAgIHZvaWQgcHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVx
dWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50MTZfdCBwb3J0LCBjb25zdCBTdHJpbmcm
IHByZWZpbGxlZFVzZXJuYW1lLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKTsK
ICAgICB2b2lkIHNldFVzZXJTY3JpcHRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CisgICAgdm9p
ZCBpbnB1dE1ldGhvZEV2ZW50KFdlYktpdDo6UXRJbnB1dE1ldGhvZEV2ZW50KTsKICNlbmRpZiAv
LyBQTEFURk9STShRVCkuCiAjaWYgUExBVEZPUk0oRUZMKQogICAgIHZvaWQgc2V0VGhlbWVQYXRo
KGNvbnN0IFN0cmluZyYpOwpAQCAtMTE3NCw2ICsxMTc5LDcgQEAgcHJpdmF0ZToKIAogI2lmIFBM
QVRGT1JNKFFUKQogICAgIFdURjo6SGFzaFNldDxSZWZQdHI8UXRSZWZDb3VudGVkTmV0d29ya1Jl
cXVlc3REYXRhPiA+IG1fYXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0czsKKyAgICB1aW50NjRfdCBt
X2N1cnJlbnRJbnB1dE1ldGhvZEV2ZW50SWQ7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQQUdFX1ZJ
U0lCSUxJVFlfQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAppbmRleCAyMjM2ZDM3Li5hZDc0MDFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNw
cApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIK
ICNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViV2hl
ZWxFdmVudC5oIgorI2luY2x1ZGUgIlF0SW5wdXRNZXRob2RFdmVudC5oIgogI2luY2x1ZGUgIlF0
Vmlld3BvcnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAi
cXF1aWNrd2VicGFnZV9wLmgiCkBAIC0zMDcsNjggKzMwOCw4IEBAIHZvaWQgUXRXZWJQYWdlRXZl
bnRIYW5kbGVyOjpzZXRWaWV3cG9ydEhhbmRsZXIoUXRWaWV3cG9ydEhhbmRsZXIqIGhhbmRsZXIp
CiAKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVJbnB1dE1ldGhvZEV2ZW50KFFJ
bnB1dE1ldGhvZEV2ZW50KiBldikKIHsKLSAgICBRU3RyaW5nIGNvbW1pdCA9IGV2LT5jb21taXRT
dHJpbmcoKTsKLSAgICBRU3RyaW5nIGNvbXBvc2l0aW9uID0gZXYtPnByZWVkaXRTdHJpbmcoKTsK
LQotICAgIGludCByZXBsYWNlbWVudFN0YXJ0ID0gZXYtPnJlcGxhY2VtZW50U3RhcnQoKTsKLSAg
ICBpbnQgcmVwbGFjZW1lbnRMZW5ndGggPSBldi0+cmVwbGFjZW1lbnRMZW5ndGgoKTsKLQotICAg
IC8vIE5PVEU6IFdlIG1pZ2h0IHdhbnQgdG8gaGFuZGxlIGV2ZW50cyBvZiBvbmUgY2hhciBhcyBz
cGVjaWFsCi0gICAgLy8gYW5kIHJlc2VuZCB0aGVtIGFzIGtleSBldmVudHMgdG8gbWFrZSB3ZWIg
c2l0ZSBjb21wbGV0aW9uIHdvcmsuCi0KLSAgICBpbnQgY3Vyc29yUG9zaXRpb25XaXRoaW5Db21w
b3NpdGlvbiA9IDA7Ci0KLSAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGlu
ZXM7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV2LT5hdHRyaWJ1dGVzKCkuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgUUlucHV0TWV0aG9kRXZlbnQ6OkF0dHJpYnV0ZSYgYXR0ciA9
IGV2LT5hdHRyaWJ1dGVzKCkuYXQoaSk7Ci0gICAgICAgIHN3aXRjaCAoYXR0ci50eXBlKSB7Ci0g
ICAgICAgIGNhc2UgUUlucHV0TWV0aG9kRXZlbnQ6OlRleHRGb3JtYXQ6IHsKLSAgICAgICAgICAg
IGlmIChjb21wb3NpdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIFFUZXh0Q2hhckZvcm1hdCB0ZXh0Q2hhckZvcm1hdCA9IGF0dHIudmFsdWUudmFs
dWU8UVRleHRGb3JtYXQ+KCkudG9DaGFyRm9ybWF0KCk7Ci0gICAgICAgICAgICBRQ29sb3IgcWNv
bG9yID0gdGV4dENoYXJGb3JtYXQudW5kZXJsaW5lQ29sb3IoKTsKLSAgICAgICAgICAgIENvbG9y
IGNvbG9yID0gbWFrZVJHQkEocWNvbG9yLnJlZCgpLCBxY29sb3IuZ3JlZW4oKSwgcWNvbG9yLmJs
dWUoKSwgcWNvbG9yLmFscGhhKCkpOwotICAgICAgICAgICAgaW50IHN0YXJ0ID0gcU1pbihhdHRy
LnN0YXJ0LCAoYXR0ci5zdGFydCArIGF0dHIubGVuZ3RoKSk7Ci0gICAgICAgICAgICBpbnQgZW5k
ID0gcU1heChhdHRyLnN0YXJ0LCAoYXR0ci5zdGFydCArIGF0dHIubGVuZ3RoKSk7Ci0gICAgICAg
ICAgICB1bmRlcmxpbmVzLmFwcGVuZChDb21wb3NpdGlvblVuZGVybGluZShzdGFydCwgZW5kLCBj
b2xvciwgZmFsc2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgUUlucHV0TWV0aG9kRXZlbnQ6OkN1cnNvcjoKLSAgICAgICAgICAgIGlmIChhdHRyLmxlbmd0
aCkKLSAgICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbldpdGhpbkNvbXBvc2l0aW9uID0gYXR0
ci5zdGFydDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyBTZWxlY3Rpb24gaXMgaGFu
ZGxlZCBmdXJ0aGVyIGRvd24uCi0gICAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKGNvbXBvc2l0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICBpbnQgc2Vs
ZWN0aW9uU3RhcnQgPSAtMTsKLSAgICAgICAgaW50IHNlbGVjdGlvbkxlbmd0aCA9IDA7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXYtPmF0dHJpYnV0ZXMoKS5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgY29uc3QgUUlucHV0TWV0aG9kRXZlbnQ6OkF0dHJpYnV0ZSYgYXR0ciA9IGV2
LT5hdHRyaWJ1dGVzKCkuYXQoaSk7Ci0gICAgICAgICAgICBpZiAoYXR0ci50eXBlID09IFFJbnB1
dE1ldGhvZEV2ZW50OjpTZWxlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGFy
dCA9IGF0dHIuc3RhcnQ7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uTGVuZ3RoID0gYXR0ci5s
ZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0aW9uU3RhcnQgPj0gMCk7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKHNlbGVjdGlvbkxlbmd0aCA+PSAwKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1fd2ViUGFn
ZVByb3h5LT5jb25maXJtQ29tcG9zaXRpb24oY29tbWl0LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0
aW9uTGVuZ3RoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoY3Vyc29yUG9zaXRpb25X
aXRoaW5Db21wb3NpdGlvbiA+PSAwKTsKLSAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50U3RhcnQg
Pj0gMCk7Ci0KLSAgICAgICAgbV93ZWJQYWdlUHJveHktPnNldENvbXBvc2l0aW9uKGNvbXBvc2l0
aW9uLCB1bmRlcmxpbmVzLAotICAgICAgICAgICAgY3Vyc29yUG9zaXRpb25XaXRoaW5Db21wb3Np
dGlvbiwgY3Vyc29yUG9zaXRpb25XaXRoaW5Db21wb3NpdGlvbiwKLSAgICAgICAgICAgIHJlcGxh
Y2VtZW50U3RhcnQsIHJlcGxhY2VtZW50TGVuZ3RoKTsKLSAgICB9Ci0KKyAgICBtX3dlYlBhZ2VQ
cm94eS0+aW5wdXRNZXRob2RFdmVudChRdElucHV0TWV0aG9kRXZlbnQoZXYpKTsKKyAgICB1cGRh
dGVUZXh0SW5wdXRTdGF0ZSgpOwogICAgIGV2LT5hY2NlcHQoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5jcHAKaW5kZXggNWNhZmFkNS4uNGU5
MzViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94
eVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQu
Y3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKICNpbmNs
dWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUXRJbnB1dE1ldGhvZEV2ZW50LmgiCiAjaW5j
bHVkZSAiUXROZXR3b3JrUmVwbHlEYXRhLmgiCiAjaW5jbHVkZSAiUXRQYWdlQ2xpZW50LmgiCiAj
aW5jbHVkZSAicXF1aWNrbmV0d29ya3JlcGx5X3AuaCIKQEAgLTgwLDYgKzgxLDM0IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpjYW5jZWxDb21wb3NpdGlvbigpCiAgICAgcHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpDYW5jZWxDb21wb3NpdGlvbigpLCBtX3BhZ2VJRCk7CiB9CiAKK3Zv
aWQgV2ViUGFnZVByb3h5OjppbnB1dE1ldGhvZEV2ZW50KFdlYktpdDo6UXRJbnB1dE1ldGhvZEV2
ZW50IGV2ZW50KQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2N1cnJlbnRJbnB1dE1ldGhvZEV2ZW50SWQrKzsKKyAgICBpZiAoIW1fY3VycmVudElucHV0
TWV0aG9kRXZlbnRJZCkKKyAgICAgICAgbV9jdXJyZW50SW5wdXRNZXRob2RFdmVudElkKys7CisK
KyAgICBpZiAoIWV2ZW50LnByZWVkaXRTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fZWRp
dG9yU3RhdGUuc2VsZWN0ZWRUZXh0ID0gZXZlbnQucHJlZWRpdFN0cmluZzsKKyAgICAgICAgaWYg
KGV2ZW50LnJlcGxhY2VtZW50TGVuZ3RoID4gMCkgeworICAgICAgICAgICAgbV9lZGl0b3JTdGF0
ZS5zdXJyb3VuZGluZ1RleHQucmVwbGFjZShtX2VkaXRvclN0YXRlLmN1cnNvclBvc2l0aW9uICsg
ZXZlbnQucmVwbGFjZW1lbnRTdGFydCwgZXZlbnQucmVwbGFjZW1lbnRMZW5ndGgsIGV2ZW50LnBy
ZWVkaXRTdHJpbmcpOworICAgICAgICAgICAgbV9lZGl0b3JTdGF0ZS5jdXJzb3JQb3NpdGlvbiAr
PSBldmVudC5yZXBsYWNlbWVudExlbmd0aDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
X2VkaXRvclN0YXRlLmN1cnNvclBvc2l0aW9uICs9IGV2ZW50LnByZWVkaXRTdHJpbmcubGVuZ3Ro
KCk7CisgICAgfQorCisgICAgaWYgKCFldmVudC5jb21taXRTdHJpbmcuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIG1fZWRpdG9yU3RhdGUuc2VsZWN0ZWRUZXh0ID0gV1RGOjplbXB0eVN0cmluZygpOwor
ICAgICAgICBtX2VkaXRvclN0YXRlLnN1cnJvdW5kaW5nVGV4dC5pbnNlcnQoZXZlbnQuY29tbWl0
U3RyaW5nLCBtX2VkaXRvclN0YXRlLmN1cnNvclBvc2l0aW9uKTsKKyAgICAgICAgbV9lZGl0b3JT
dGF0ZS5jdXJzb3JQb3NpdGlvbiArPSBldmVudC5jb21taXRTdHJpbmcubGVuZ3RoKCk7CisgICAg
fQorCisgICAgZXZlbnQuZXZlbnRJZCA9IG1fY3VycmVudElucHV0TWV0aG9kRXZlbnRJZDsKKyAg
ICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OklucHV0TWV0aG9kRXZlbnQoZXZl
bnQpLCBtX3BhZ2VJRCk7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpyZWdpc3RlckFwcGxpY2F0
aW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogewogICAgIHByb2Nlc3MoKS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6UmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShzY2hlbWUpLCBtX3Bh
Z2VJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
aW5kZXggNzc5ODdmMi4uOWYzMDAxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMjQyLDYgKzI0Miw5IEBAIFdlYlBhZ2U6OldlYlBhZ2Uo
dWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQogI2lmIFBMQVRGT1JNKFdJTikKICAgICAsIG1fZ2VzdHVyZVJlYWNoZWRTY3JvbGxpbmdM
aW1pdChmYWxzZSkKICNlbmRpZgorI2lmIFBMQVRGT1JNKFFUKQorICAgICwgbV9jdXJyZW50SW5w
dXRNZXRob2RFdmVudElkKDApCisjZW5kaWYKICNpZiBFTkFCTEUoUEFHRV9WSVNJQklMSVRZX0FQ
SSkKICAgICAsIG1fdmlzaWJpbGl0eVN0YXRlKFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGVW
aXNpYmxlKQogI2VuZGlmCkBAIC01MjksNiArNTMyLDcgQEAgRWRpdG9yU3RhdGUgV2ViUGFnZTo6
ZWRpdG9yU3RhdGUoKSBjb25zdAogICAgICAgICAgICAgcmVzdWx0LnN1cnJvdW5kaW5nVGV4dC5y
ZW1vdmUocmVzdWx0LmFuY2hvclBvc2l0aW9uLCByZXN1bHQuY3Vyc29yUG9zaXRpb24gLSByZXN1
bHQuYW5jaG9yUG9zaXRpb24pOwogICAgICAgICB9CiAgICAgfQorICAgIHJlc3VsdC5pbnB1dE1l
dGhvZEV2ZW50SWQgPSBtX2N1cnJlbnRJbnB1dE1ldGhvZEV2ZW50SWQ7CiAjZW5kaWYKIAogICAg
IHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAppbmRleCA0ZDIwNDIxLi5lYjQ0NjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTE1Nyw2ICsxNTcsMTAgQEAgY2xhc3MgV2ViR2VzdHVy
ZUV2ZW50OwogY2xhc3MgV2ViVG91Y2hFdmVudDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQp
CitzdHJ1Y3QgUXRJbnB1dE1ldGhvZEV2ZW50OworI2VuZGlmCisKIGNsYXNzIFdlYlBhZ2UgOiBw
dWJsaWMgQVBJT2JqZWN0LCBwdWJsaWMgQ29yZUlQQzo6TWVzc2FnZVNlbmRlcjxXZWJQYWdlPiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVCdW5kbGVQYWdl
OwpAQCAtNDEyLDYgKzQxNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNv
bnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1
bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5k
LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFu
Z2VFbmQpOwogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwg
aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgaW50NjRfdCBzZWxlY3Rpb25MZW5ndGgpOwogICAgIHZv
aWQgY2FuY2VsQ29tcG9zaXRpb24oKTsKKyAgICB2b2lkIGlucHV0TWV0aG9kRXZlbnQoY29uc3Qg
V2ViS2l0OjpRdElucHV0TWV0aG9kRXZlbnQmKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFD
KQpAQCAtODczLDYgKzg3OCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkK
ICAgICBIYXNoTWFwPFN0cmluZywgUXROZXR3b3JrUmVwbHkqPiBtX2FwcGxpY2F0aW9uU2NoZW1l
UmVwbGllczsKKyAgICB1aW50NjRfdCBtX2N1cnJlbnRJbnB1dE1ldGhvZEV2ZW50SWQ7CiAjZW5k
aWYKICNpZiBFTkFCTEUoUEFHRV9WSVNJQklMSVRZX0FQSSkKICAgICBXZWJDb3JlOjpQYWdlVmlz
aWJpbGl0eVN0YXRlIG1fdmlzaWJpbGl0eVN0YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCA0YzI2MGViLi5k
YzVjNWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtMjM4LDYgKzIzOCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBh
Z2UgewogICAgIFNldENvbXBvc2l0aW9uKFdURjo6U3RyaW5nIHRleHQsIFdURjo6VmVjdG9yPFdl
YkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rp
b25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdl
U3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpCiAgICAgQ29uZmlybUNvbXBvc2l0
aW9uKFdURjo6U3RyaW5nIHRleHQsIGludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIGludDY0X3Qgc2Vs
ZWN0aW9uTGVuZ3RoKQogICAgIENhbmNlbENvbXBvc2l0aW9uKCkKKyAgICBJbnB1dE1ldGhvZEV2
ZW50KFdlYktpdDo6UXRJbnB1dE1ldGhvZEV2ZW50IGV2ZW50KQogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvV2ViUGFnZVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9X
ZWJQYWdlUXQuY3BwCmluZGV4IDJlOTBhNzMuLmYzMzUwYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwCkBAIC0yNywxMSArMjcs
MTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAKKyNpbmNs
dWRlICJFZGl0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUXRJbnB1dE1ldGhvZEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViRWRpdG9yQ2xpZW50LmgiCiAj
aW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxRQ29sb3I+CisjaW5jbHVkZSA8UVRl
eHRDaGFyRm9ybWF0PgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxkLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+CkBAIC0zNzQsNyArMzc4LDYgQEAgdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25z
dCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW4KICAgICAgICAg
fQogCiAgICAgICAgIHRhcmdldEZyYW1lLT5lZGl0b3IoKS0+c2V0Q29tcG9zaXRpb24odGV4dCwg
dW5kZXJsaW5lcywgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7Ci0KICAgICAgICAgLy8g
RklYTUU6IHN0YXRpY19jYXN0PFdlYkVkaXRvckNsaWVudCo+KHRhcmdldEZyYW1lLT5lZGl0b3Io
KS0+Y2xpZW50KCkpLT5zZW5kU2VsZWN0aW9uQ2hhbmdlZE1lc3NhZ2UoKTsKICAgICB9CiB9CkBA
IC00MjIsNCArNDI1LDg2IEBAIHZvaWQgV2ViUGFnZTo6c2V0VXNlclNjcmlwdHMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHNjcmlwdHMpCiAgICAgICAgIHBhZ2VHcm91cC0+YWRkVXNlclNjcmlwdFRv
V29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCksIHNjcmlwdHMuYXQoaSksIEtVUkwoKSwgbnVs
bHB0ciwgbnVsbHB0ciwgSW5qZWN0QXREb2N1bWVudEVuZCwgSW5qZWN0SW5Ub3BGcmFtZU9ubHkp
OwogfQogCit2b2lkIFdlYlBhZ2U6OmlucHV0TWV0aG9kRXZlbnQoY29uc3QgV2ViS2l0OjpRdElu
cHV0TWV0aG9kRXZlbnQmIGV2ZW50KQoreworICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IHRhcmdl
dEZyYW1lRm9yRWRpdGluZyh0aGlzKTsKKyAgICBpZiAoIXRhcmdldEZyYW1lKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIXRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRp
dGFibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50SW5wdXRNZXRob2RFdmVu
dElkID0gZXZlbnQuZXZlbnRJZDsKKworICAgIFdURjo6U3RyaW5nIGNvbW1pdCA9IGV2ZW50LmNv
bW1pdFN0cmluZzsKKyAgICBXVEY6OlN0cmluZyBjb21wb3NpdGlvbiA9IGV2ZW50LnByZWVkaXRT
dHJpbmc7CisKKyAgICBpbnQgcmVwbGFjZW1lbnRTdGFydCA9IGV2ZW50LnJlcGxhY2VtZW50U3Rh
cnQ7CisgICAgaW50IHJlcGxhY2VtZW50TGVuZ3RoID0gZXZlbnQucmVwbGFjZW1lbnRMZW5ndGg7
CisgICAgaW50IHNlbGVjdGlvblN0YXJ0ID0gLTE7CisgICAgaW50IHNlbGVjdGlvbkxlbmd0aCA9
IDA7CisgICAgaW50IGN1cnNvclBvc2l0aW9uID0gZWRpdG9yU3RhdGUoKS5jdXJzb3JQb3NpdGlv
bjsKKworICAgIGludCBjdXJzb3JQb3NpdGlvbldpdGhpbkNvbXBvc2l0aW9uID0gLTE7CisKKyAg
ICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGV2ZW50LmF0dHJpYnV0ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29u
c3QgUUlucHV0TWV0aG9kRXZlbnQ6OkF0dHJpYnV0ZSYgYXR0ciA9IGV2ZW50LmF0dHJpYnV0ZXMu
YXQoaSk7CisgICAgICAgIHN3aXRjaCAoYXR0ci50eXBlKSB7CisgICAgICAgIGNhc2UgUUlucHV0
TWV0aG9kRXZlbnQ6OlRleHRGb3JtYXQ6IHsKKyAgICAgICAgICAgIGlmIChjb21wb3NpdGlvbi5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIFFUZXh0Q2hh
ckZvcm1hdCB0ZXh0Q2hhckZvcm1hdCA9IGF0dHIudmFsdWUudmFsdWU8UVRleHRGb3JtYXQ+KCku
dG9DaGFyRm9ybWF0KCk7CisgICAgICAgICAgICBRQ29sb3IgcWNvbG9yID0gdGV4dENoYXJGb3Jt
YXQudW5kZXJsaW5lQ29sb3IoKTsKKyAgICAgICAgICAgIENvbG9yIGNvbG9yID0gbWFrZVJHQkEo
cWNvbG9yLnJlZCgpLCBxY29sb3IuZ3JlZW4oKSwgcWNvbG9yLmJsdWUoKSwgcWNvbG9yLmFscGhh
KCkpOworICAgICAgICAgICAgaW50IHN0YXJ0ID0gcU1pbihhdHRyLnN0YXJ0LCAoYXR0ci5zdGFy
dCArIGF0dHIubGVuZ3RoKSk7CisgICAgICAgICAgICBpbnQgZW5kID0gcU1heChhdHRyLnN0YXJ0
LCAoYXR0ci5zdGFydCArIGF0dHIubGVuZ3RoKSk7CisgICAgICAgICAgICB1bmRlcmxpbmVzLmFw
cGVuZChDb21wb3NpdGlvblVuZGVybGluZShzdGFydCwgZW5kLCBjb2xvciwgZmFsc2UpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBRSW5wdXRNZXRob2RF
dmVudDo6Q3Vyc29yOgorICAgICAgICAgICAgaWYgKGF0dHIubGVuZ3RoKQorICAgICAgICAgICAg
ICAgIGN1cnNvclBvc2l0aW9uV2l0aGluQ29tcG9zaXRpb24gPSBhdHRyLnN0YXJ0OworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBRSW5wdXRNZXRob2RFdmVudDo6U2VsZWN0aW9u
OgorICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBhdHRyLnN0YXJ0OworICAgICAgICAgICAg
c2VsZWN0aW9uTGVuZ3RoID0gYXR0ci5sZW5ndGg7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzZWxlY3Rp
b25TdGFydCA8IDApCisgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gMDsKKworICAgIEVkaXRvciog
ZWRpdG9yID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpOworICAgIGVkaXRvci0+c2V0SWdub3JlQ29t
cG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7CisKKyAgICBpZiAocmVwbGFjZW1lbnRMZW5n
dGggPiAwKSB7CisgICAgICAgIEVsZW1lbnQqIHNjb3BlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlv
bigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CisKKyAgICAgICAgLy8gVGhlIGxheW91dCBuZWVk
cyB0byBiZSB1cHRvZGF0ZSBiZWZvcmUgc2V0dGluZyBhIHNlbGVjdGlvbgorICAgICAgICB0YXJn
ZXRGcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisKKyAgICAgICAgUmVmUHRyPFJh
bmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFu
ZExlbmd0aChzY29wZSwgcmVwbGFjZW1lbnRTdGFydCwgcmVwbGFjZW1lbnRMZW5ndGgpOworICAg
ICAgICB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAg
fQorCisgICAgaWYgKCFjb21taXQuaXNFbXB0eSgpKSB7CisgICAgICAgIGVkaXRvci0+c2V0Q29t
cG9zaXRpb24oZWRpdG9yLT5zZWxlY3RlZFRleHQoKSwgdW5kZXJsaW5lcywgc2VsZWN0aW9uU3Rh
cnQsIHNlbGVjdGlvblN0YXJ0ICsgZWRpdG9yLT5zZWxlY3RlZFRleHQoKS5sZW5ndGgoKSk7Cisg
ICAgICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9uKGNvbW1pdCk7CisgICAgfQorCisgICAg
aWYgKCFjb21wb3NpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGVkaXRvci0+c2V0Q29tcG9zaXRp
b24oY29tcG9zaXRpb24sIHVuZGVybGluZXMsIGN1cnNvclBvc2l0aW9uV2l0aGluQ29tcG9zaXRp
b24gKyBzZWxlY3Rpb25TdGFydCwgY3Vyc29yUG9zaXRpb25XaXRoaW5Db21wb3NpdGlvbiArICBz
ZWxlY3Rpb25TdGFydCArIHNlbGVjdGlvbkxlbmd0aCk7CisKKyAgICBlZGl0b3ItPnNldElnbm9y
ZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKGZhbHNlKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKLS0gCjEuNy41LjQKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>