<?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>126479</bug_id>
          
          <creation_ts>2014-01-03 17:48:05 -0800</creation_ts>
          <short_desc>Add support to retrieve the autocorrection context in WK2</short_desc>
          <delta_ts>2014-01-06 14:22:36 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>benjamin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>964355</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-03 17:48:05 -0800</bug_when>
    <thetext>This bug tracks the work required to retrieve the context for autocorrection and IME on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964357</commentid>
    <comment_count>1</comment_count>
      <attachid>220361</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-03 17:52:53 -0800</bug_when>
    <thetext>Created attachment 220361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964362</commentid>
    <comment_count>2</comment_count>
      <attachid>220361</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-03 18:17:13 -0800</bug_when>
    <thetext>Comment on attachment 220361
Patch

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

&gt; Source/WebKit2/UIProcess/AutoCorrectionCallback.h:118
&gt; +private:
&gt; +
&gt; +    AutocorrectionContextCallback(void* context, CallbackFunction callback)

Exra newline.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:1643
&gt; +    WKAutocorrectionContext *context =[[WKAutocorrectionContext alloc] init];

Missing space after the =.

&gt; Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm:1652
&gt; +    if (beforeText &amp;&amp; [beforeText length])
&gt; +        context.contextBeforeSelection = [beforeText copy];
&gt; +    if (selectedText &amp;&amp; [selectedText length])
&gt; +        context.selectedText = [selectedText copy];
&gt; +    if (markedText &amp;&amp; [markedText length])
&gt; +        context.markedText = [markedText copy];
&gt; +    if (afterText &amp;&amp; [afterText length])
&gt; +        context.contextAfterSelection = [afterText copy];

I think calling length when the NSString is nil is fine, no need to nil check them.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:725
&gt; +static void computeAutocorrectionContext(Frame&amp; frame, String&amp; contextBefore, String&amp; markedText, String&amp; selectedText, String&amp; contextAfter, NSRange&amp; selectedRangeInMarkedText)

Is this all new code or is it a version of something elsewhere?  If it is kind of duplicated, can we move this down into WebCore/?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:792
&gt; +    NSRange selectedRangeInMarkedText;

I don&apos;t see a great reason to use NSRange here. Can we just use a pair of uint64_ts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964669</commentid>
    <comment_count>3</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-06 10:52:16 -0800</bug_when>
    <thetext>Thanks for the review. I&apos;ll address your comments.
&gt; Is this all new code or is it a version of something elsewhere?  If it is kind of duplicated, can we move this down into WebCore/?
This is all new code.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:792
&gt; &gt; +    NSRange selectedRangeInMarkedText;
&gt; 
&gt; I don&apos;t see a great reason to use NSRange here. Can we just use a pair of uint64_ts?.
Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964760</commentid>
    <comment_count>4</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-06 14:22:36 -0800</bug_when>
    <thetext>Committed 161358.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220361</attachid>
            <date>2014-01-03 17:52:53 -0800</date>
            <delta_ts>2014-01-03 18:17:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>autocorrection-context-os.txt</filename>
            <type>text/plain</type>
            <size>25832</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTMwMCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE0LTAxLTAzICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgdG8gcmV0
cmlldmUgdGhlIGF1dG9jb3JyZWN0aW9uIGNvbnRleHQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdlIGFyZSBhZGRpbmcgdGhlIHN1cHBv
cnQgdG8gcmV0cmlldmUgdGhlIGlucHV0IGNvbnRleHQgZm9yIGF1dG9jb3JyZWN0aW9uCisgICAg
ICAgIGFuZCBpbnB1dCBtZXRob2RzIG9uIGlPUy4gVGhlIGltcGxlbWVudGF0aW9uIGlzIHByb3Zp
ZGVkIGJvdGggdmlhIHN5bmNocm9ub3VzCisgICAgICAgIGFuZCBhc3luY2hyb25vdXMgY2FsbHMg
dG8gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvSGFuZGxlTWVzc2Fn
ZS5oOiBBZGRlZCB0ZW1wbGF0ZSB3aXRoIHplcm8gaW5wdXQgcGFyYW1ldGVycyBhbmQgc2l4IHJl
cGx5IHBhcmFtZXRlcnMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRlcmFjdGlv
blZpZXcubW06CisgICAgICAgIChhdXRvY29ycmVjdGlvbkRhdGEpOgorICAgICAgICAoLVtXS0lu
dGVyYWN0aW9uVmlldyByZXF1ZXN0QXV0b2NvcnJlY3Rpb25SZWN0c0ZvclN0cmluZzp3aXRoQ29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgIChhdXRvY29ycmVjdGlvblJlc3VsdCk6CisgICAg
ICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246dG9TdHJpbmc6d2l0
aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoYXV0b2NvcnJlY3Rpb25Db250ZXh0KToK
KyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgcmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4
dFdpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcg
aGFzTWFya2VkVGV4dF0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfc3RhcnRBc3Np
c3RpbmdOb2RlXSk6CisgICAgICAgICgrW1dLQXV0b2NvcnJlY3Rpb25Db250ZXh0IGF1dG9jb3Jy
ZWN0aW9uQ29udGV4dFdpdGhEYXRhOm1hcmtlZFRleHQ6c2VsZWN0ZWRUZXh0OmFmdGVyVGV4dDpz
ZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0Ol0pOgorICAgICAgICAoLVtXS0F1dG9jb3JyZWN0aW9u
Q29udGV4dCBkZWFsbG9jXSk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9Db3JyZWN0aW9uQ2Fs
bGJhY2suaDoKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2s6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNr
Ojp+QXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpBdXRv
Y29ycmVjdGlvbkNvbnRleHRDYWxsYmFjazo6cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVl
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2s6OmludmFs
aWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjazo6
QXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2spOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2Vi
UGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmF1dG9jb3Jy
ZWN0aW9uQ29udGV4dENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpy
ZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpnZXRBdXRvY29ycmVjdGlvbkNvbnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVz
c2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
OgorICAgICAgICAoV2ViS2l0Ojpjb21wdXRlQXV0b2NvcnJlY3Rpb25Db250ZXh0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldEF1dG9jb3JyZWN0aW9uQ29udGV4dCk6CisKIDIwMTQt
MDEtMDMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
W2lPU10gW1dLMl0gVGlsZUNvbnRyb2xsZXIgY3JlYXRlcyBhbGwgdGlsZXMgb24gZmlyc3QgcGFp
bnQsIG1ha2luZyBpdCBzbG93IGFuZCBjb25zdW1pbmcgbG90cyBvZiBtZW1vcnkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9IYW5kbGVNZXNzYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaAkocmV2aXNpb24gMTYx
Mjk5KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtODgsNiArODgsMTIgQEAgdm9pZCBjYWxsTWVtYmVyRnVuY3Rpb24oc3Rk
Ojp0dXBsZTw+JiYsIAogICAgIChvYmplY3QtPipmdW5jdGlvbikoc3RkOjpnZXQ8MD4ocmVwbHlB
cmdzKSwgc3RkOjpnZXQ8MT4ocmVwbHlBcmdzKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEMs
IHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBSMSwgdHlwZW5hbWUgUjIsIHR5cGVuYW1lIFIzLCB0eXBl
bmFtZSBSNCwgdHlwZW5hbWUgUjUsIHR5cGVuYW1lIFI2Pgordm9pZCBjYWxsTWVtYmVyRnVuY3Rp
b24oc3RkOjp0dXBsZTw+JiYsIHN0ZDo6dHVwbGU8UjEsIFIyLCBSMywgUjQsIFI1LCBSNj4mIHJl
cGx5QXJncywgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAob2JqZWN0LT4qZnVuY3Rp
b24pKHN0ZDo6Z2V0PDA+KHJlcGx5QXJncyksIHN0ZDo6Z2V0PDE+KHJlcGx5QXJncyksIHN0ZDo6
Z2V0PDI+KHJlcGx5QXJncyksIHN0ZDo6Z2V0PDM+KHJlcGx5QXJncyksIHN0ZDo6Z2V0PDQ+KHJl
cGx5QXJncyksIHN0ZDo6Z2V0PDU+KHJlcGx5QXJncykpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDLCB0eXBlbmFtZSBNRiwgdHlwZW5hbWUgUDE+CiB2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihz
dGQ6OnR1cGxlPFAxPiYmIGFyZ3MsIHN0ZDo6dHVwbGU8PiYsIEMqIG9iamVjdCwgTUYgZnVuY3Rp
b24pCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0b0NvcnJlY3Rpb25DYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRvQ29ycmVj
dGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDE2MTI5OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BdXRvQ29ycmVjdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgw
LDUxIEBAIHByaXZhdGU6CiAgICAgQ2FsbGJhY2tGdW5jdGlvbiBtX2NhbGxiYWNrOwogfTsKIAor
Y2xhc3MgQXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2sgOiBwdWJsaWMgQ2FsbGJhY2tCYXNl
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKCpDYWxsYmFja0Z1bmN0aW9uKShjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCB1aW50
NjRfdCwgdWludDY0X3QsIFdLRXJyb3JSZWYsIHZvaWQqKTsKKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrPiBjcmVhdGUodm9pZCogY29udGV4dCwg
Q2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2soY29udGV4dCwgY2FsbGJhY2spKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIH5BdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjaygpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fY2FsbGJhY2spOworICAgIH0KKworICAgIHZvaWQgcGVy
Zm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKGNvbnN0IFN0cmluZyYgcmV0dXJuVmFsdWUxLCBj
b25zdCBTdHJpbmcmIHJldHVyblZhbHVlMiwgY29uc3QgU3RyaW5nJiByZXR1cm5WYWx1ZTMsIGNv
bnN0IFN0cmluZyYgcmV0dXJuVmFsdWU0LCB1aW50NjRfdCByZXR1cm5WYWx1ZTUsIHVpbnQ2NF90
IHJldHVyblZhbHVlNikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKKworICAg
ICAgICBtX2NhbGxiYWNrKHJldHVyblZhbHVlMSwgcmV0dXJuVmFsdWUyLCByZXR1cm5WYWx1ZTMs
IHJldHVyblZhbHVlNCwgcmV0dXJuVmFsdWU1LCByZXR1cm5WYWx1ZTYsIDAsIGNvbnRleHQoKSk7
CisKKyAgICAgICAgbV9jYWxsYmFjayA9IDA7CisgICAgfQorCisgICAgdm9pZCBpbnZhbGlkYXRl
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKKworICAgICAgICBSZWZQdHI8
QVBJOjpFcnJvcj4gZXJyb3IgPSBBUEk6OkVycm9yOjpjcmVhdGUoKTsKKyAgICAgICAgbV9jYWxs
YmFjayhTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgMCwgMCwgdG9BUEko
ZXJyb3IuZ2V0KCkpLCBjb250ZXh0KCkpOworCisgICAgICAgIG1fY2FsbGJhY2sgPSAwOworICAg
IH0KKworcHJpdmF0ZToKKworICAgIEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrKHZvaWQq
IGNvbnRleHQsIENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAgICAgIDogQ2FsbGJhY2tC
YXNlKGNvbnRleHQpCisgICAgICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKKyAgICB9CisgICAgCisgICAgQ2FsbGJhY2tGdW5jdGlv
biBtX2NhbGxiYWNrOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBB
dXRvQ29ycmVjdGlvbkNhbGxiYWNrX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxNjEyOTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc5Miw2ICszNzkyLDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUoKQogICAgIGludmFsaWRhdGVDYWxsYmFj
a01hcChtX2dlc3R1cmVDYWxsYmFja3MpOwogICAgIGludmFsaWRhdGVDYWxsYmFja01hcChtX3Rv
dWNoZXNDYWxsYmFja3MpOwogICAgIGludmFsaWRhdGVDYWxsYmFja01hcChtX2F1dG9jb3JyZWN0
aW9uQ2FsbGJhY2tzKTsKKyAgICBpbnZhbGlkYXRlQ2FsbGJhY2tNYXAobV9hdXRvY29ycmVjdGlv
bkNvbnRleHRDYWxsYmFja3MpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIGludmFs
aWRhdGVDYWxsYmFja01hcChtX3ByaW50RmluaXNoZWRDYWxsYmFja3MpOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTYxMjk5KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MzUsNiArNDM1LDggQEAgcHVibGljOgogICAgIHZvaWQgZXh0ZW5kU2VsZWN0aW9uKFdlYkNvcmU6
OlRleHRHcmFudWxhcml0eSk7CiAgICAgdm9pZCByZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKGNv
bnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0aW9uLCBQYXNzUmVmUHRyPEF1dG9jb3JyZWN0
aW9uRGF0YUNhbGxiYWNrPik7CiAgICAgdm9pZCBhcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIFBhc3NSZWZQdHI8
U3RyaW5nQ2FsbGJhY2s+KTsKKyAgICB2b2lkIHJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHQo
UGFzc1JlZlB0cjxBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjaz4pOworICAgIHZvaWQgZ2V0
QXV0b2NvcnJlY3Rpb25Db250ZXh0KFN0cmluZyYgY29udGV4dEJlZm9yZSwgU3RyaW5nJiBtYXJr
ZWRUZXh0LCBTdHJpbmcmIHNlbGVjdGVkVGV4dCwgU3RyaW5nJiBjb250ZXh0QWZ0ZXIsIHVpbnQ2
NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CiAjZW5kaWYKIAogICAgIGNvbnN0IEVk
aXRvclN0YXRlJiBlZGl0b3JTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9yU3RhdGU7IH0K
QEAgLTEwODAsNiArMTA4Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXN0dXJlQ2FsbGJhY2so
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCB1
aW50NjRfdCk7CiAgICAgdm9pZCB0b3VjaGVzQ2FsbGJhY2soY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCB1aW50MzJfdCwgdWludDY0X3QpOwogICAgIHZvaWQgYXV0b2NvcnJlY3Rpb25EYXRhQ2Fs
bGJhY2soY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBjb25zdCBTdHJpbmcmLCBm
bG9hdCwgdWludDY0X3QsIHVpbnQ2NF90KTsKKyAgICB2b2lkIGF1dG9jb3JyZWN0aW9uQ29udGV4
dENhbGxiYWNrKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3QpOwogICAgIHZvaWQgaW50
ZXJwcmV0S2V5RXZlbnQoY29uc3QgRWRpdG9yU3RhdGUmLCBib29sIGlzQ2hhckV2ZW50LCBib29s
JiBoYW5kbGVkKTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTExOTksNiArMTIwMiw3
IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEdlc3R1cmVDYWxsYmFj
az4+IG1fZ2VzdHVyZUNhbGxiYWNrczsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8VG91
Y2hlc0NhbGxiYWNrPj4gbV90b3VjaGVzQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8dWludDY0X3Qs
IFJlZlB0cjxBdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjaz4+IG1fYXV0b2NvcnJlY3Rpb25DYWxs
YmFja3M7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEF1dG9jb3JyZWN0aW9uQ29udGV4
dENhbGxiYWNrPj4gbV9hdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFja3M7CiAjZW5kaWYKICNp
ZiBQTEFURk9STShHVEspCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFByaW50RmluaXNo
ZWRDYWxsYmFjaz4+IG1fcHJpbnRGaW5pc2hlZENhbGxiYWNrczsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24g
MTYxMjk5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBh
Z2VQcm94eSB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEdlc3R1cmVDYWxsYmFjayhXZWJDb3Jl
OjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVT
dGF0ZSwgdWludDMyX3QgZmxhZ3MsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgVG91Y2hlc0Nh
bGxiYWNrKFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCB1aW50NjRf
dCBjYWxsYmFja0lEKQotICAgIEF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrKFZlY3RvcjxXZWJD
b3JlOjpGbG9hdFJlY3Q+IHRleHRSZWN0cywgU3RyaW5nIGZvbnROYW1lLCBkb3VibGUgZm9udFNp
emUsIHVpbnQ2NF90IHRyYWl0cywgdWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgQXV0b2NvcnJl
Y3Rpb25EYXRhQ2FsbGJhY2soVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gdGV4dFJlY3RzLCBT
dHJpbmcgZm9udE5hbWUsIGRvdWJsZSBmb250U2l6ZSwgdWludDY0X3QgdHJhaXRzLCB1aW50NjRf
dCBjYWxsYmFja0lEKQorICAgIEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrKFN0cmluZyBi
ZWZvcmVUZXh0LCBTdHJpbmcgbWFya2VkVGV4dCwgU3RyaW5nIHNlbGVjdGVkVGV4dCwgU3RyaW5n
IGFmdGVyVGV4dCwgdWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3Qg
Y2FsbGJhY2tJRCkKICAgICBJbnRlcnByZXRLZXlFdmVudChXZWJLaXQ6OkVkaXRvclN0YXRlIHN0
YXRlLCBib29sIGlzQ2hhckV2ZW50KSAtPiAoYm9vbCBoYW5kbGVkKQogI2VuZGlmCiAjaWYgUExB
VEZPUk0oR1RLKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tJbnRl
cmFjdGlvblZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0JKHJldmlzaW9uIDE2MTI5OSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsNiArMTAwLDE3IEBAICsgKFdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqKWF1dG9j
b3JyZWN0aW8KIAogQGVuZAogCitAaW50ZXJmYWNlIFdLQXV0b2NvcnJlY3Rpb25Db250ZXh0IDog
VUlXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCB7CisgICAgTlNTdHJpbmcgKl9jb250ZXh0QmVmb3Jl
U2VsZWN0aW9uOworICAgIE5TU3RyaW5nICpfc2VsZWN0ZWRUZXh0OworICAgIE5TU3RyaW5nICpf
bWFya2VkVGV4dDsKKyAgICBOU1N0cmluZyAqX2NvbnRleHRBZnRlclNlbGVjdGlvbjsKKyAgICBO
U1JhbmdlIF9yYW5nZUluTWFya2VkVGV4dDsKK30KKworKyAoV0tBdXRvY29ycmVjdGlvbkNvbnRl
eHQgKilhdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoRGF0YTooTlNTdHJpbmcgKiliZWZvcmVUZXh0
IG1hcmtlZFRleHQ6KE5TU3RyaW5nICopbWFya2VkVGV4dCBzZWxlY3RlZFRleHQ6KE5TU3RyaW5n
ICopc2VsZWN0ZWRUZXh0IGFmdGVyVGV4dDooTlNTdHJpbmcgKilhZnRlclRleHQgc2VsZWN0ZWRS
YW5nZUluTWFya2VkVGV4dDooTlNSYW5nZSlyYW5nZTsKK0BlbmQKKwogQGludGVyZmFjZSBVSVRl
eHRJbnRlcmFjdGlvbkFzc2lzdGFudCAoVUlUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnRfSW50ZXJu
YWwpCiAvLyBGSVhNRTogdGhpcyBuZWVkcyB0byBiZSBtb3ZlZCBmcm9tIHRoZSBpbnRlcm5hbCBo
ZWFkZXIgdG8gdGhlIHByaXZhdGUuCiAtIChpZClpbml0V2l0aFZpZXc6KFVJUmVzcG9uZGVyIDxV
SVRleHRJbnB1dD4gKil2aWV3OwpAQCAtMTA3LDYgKzExOCw3IEBAIC0gKHZvaWQpc2VsZWN0V29y
ZDsKIEBlbmQKIAogdHlwZWRlZiB2b2lkICheVUlXS0F1dG9jb3JyZWN0aW9uQ29tcGxldGlvbkhh
bmRsZXIpKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICpyZWN0c0ZvcklucHV0KTsKK3R5cGVkZWYg
dm9pZCAoXlVJV0tBdXRvY29ycmVjdGlvbkNvbnRleHRIYW5kbGVyKShVSVdLQXV0b2NvcnJlY3Rp
b25Db250ZXh0ICphdXRvY29ycmVjdGlvbkNvbnRleHQpOwogCiBzdHJ1Y3QgV0tBdXRvQ29ycmVj
dGlvbkRhdGF7CiAgICAgU3RyaW5nIGZvbnROYW1lOwpAQCAtMTE0LDcgKzEyNiw4IEBAIHN0cnVj
dCBXS0F1dG9Db3JyZWN0aW9uRGF0YXsKICAgICB1aW50NjRfdCBmb250VHJhaXRzOwogICAgIENH
UmVjdCB0ZXh0Rmlyc3RSZWN0OwogICAgIENHUmVjdCB0ZXh0TGFzdFJlY3Q7Ci0gICAgVUlXS0F1
dG9jb3JyZWN0aW9uQ29tcGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXI7CisgICAgVUlX
S0F1dG9jb3JyZWN0aW9uQ29tcGxldGlvbkhhbmRsZXIgYXV0b2NvcnJlY3Rpb25IYW5kbGVyOwor
ICAgIFVJV0tBdXRvY29ycmVjdGlvbkNvbnRleHRIYW5kbGVyIGF1dG9jb3JyZWN0aW9uQ29udGV4
dEhhbmRsZXI7CiB9OwogCiBAaW50ZXJmYWNlIFdLSW50ZXJhY3Rpb25WaWV3IChQcml2YXRlKQpA
QCAtODA4LDkgKzgyMSw5IEBAIHN0YXRpYyB2b2lkIGF1dG9jb3JyZWN0aW9uRGF0YShjb25zdCBW
ZWMKICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPnRleHRGaXJzdFJlY3QgPSBmaXJzdFJlY3Q7CiAg
ICAgYXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0TGFzdFJlY3QgPSBsYXN0UmVjdDsKIAotICAgIGF1
dG9jb3JyZWN0aW9uRGF0YS0+Y29tcGxldGlvbkhhbmRsZXIocmVjdHMuc2l6ZSgpID8gW1dLQXV0
b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOmZpcnN0UmVjdCBs
YXN0UmVjdDpsYXN0UmVjdF0gOiBuaWwpOwotICAgIFthdXRvY29ycmVjdGlvbkRhdGEtPmNvbXBs
ZXRpb25IYW5kbGVyIHJlbGVhc2VdOwotICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+Y29tcGxldGlv
bkhhbmRsZXIgPSBuaWw7CisgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhh
bmRsZXIocmVjdHMuc2l6ZSgpID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlv
blJlY3RzV2l0aFJlY3RzOmZpcnN0UmVjdCBsYXN0UmVjdDpsYXN0UmVjdF0gOiBuaWwpOworICAg
IFthdXRvY29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uSGFuZGxlciByZWxlYXNlXTsKKyAg
ICBhdXRvY29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uSGFuZGxlciA9IG5pbDsKIH0KIAog
Ly8gVGhlIGNvbXBsZXRpb24gaGFuZGxlciBjYW4gcGFzcyBuaWwgaWYgaW5wdXQgZG9lcyBub3Qg
bWF0Y2ggdGhlIGFjdHVhbCB0ZXh0IHByZWNlZGluZyB0aGUgaW5zZXJ0aW9uIHBvaW50LgpAQCAt
ODIwLDcgKzgzMyw3IEBAIC0gKHZvaWQpcmVxdWVzdEF1dG9jb3JyZWN0aW9uUmVjdHNGb3JTdHIK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLmNvbXBsZXRpb25IYW5kbGVyID0gW2NvbXBsZXRpb25I
YW5kbGVyIGNvcHldOworICAgIF9hdXRvY29ycmVjdGlvbkRhdGEuYXV0b2NvcnJlY3Rpb25IYW5k
bGVyID0gW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldOwogICAgIF9wYWdlLT5yZXF1ZXN0QXV0b2Nv
cnJlY3Rpb25EYXRhKGlucHV0LCBBdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjazo6Y3JlYXRlKHNl
bGYsIGF1dG9jb3JyZWN0aW9uRGF0YSkpOwogfQogCkBAIC04NDAsMjIgKzg1Myw0NCBAQCBzdGF0
aWMgdm9pZCBhdXRvY29ycmVjdGlvblJlc3VsdChXS1N0cmluCiAgICAgQVNTRVJUKHZpZXcpOwog
ICAgIFdLQXV0b0NvcnJlY3Rpb25EYXRhICphdXRvY29ycmVjdGlvbkRhdGEgPSB2aWV3LmF1dG9j
b3JyZWN0aW9uRGF0YTsKIAotICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+Y29tcGxldGlvbkhhbmRs
ZXIoY29ycmVjdGlvbiA/IFtXS0F1dG9jb3JyZWN0aW9uUmVjdHMgYXV0b2NvcnJlY3Rpb25SZWN0
c1dpdGhSZWN0czphdXRvY29ycmVjdGlvbkRhdGEtPnRleHRGaXJzdFJlY3QgbGFzdFJlY3Q6YXV0
b2NvcnJlY3Rpb25EYXRhLT50ZXh0TGFzdFJlY3RdIDogbmlsKTsKLSAgICBbYXV0b2NvcnJlY3Rp
b25EYXRhLT5jb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKLSAgICBhdXRvY29ycmVjdGlvbkRh
dGEtPmNvbXBsZXRpb25IYW5kbGVyID0gbmlsOworICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+YXV0
b2NvcnJlY3Rpb25IYW5kbGVyKGNvcnJlY3Rpb24gPyBbV0tBdXRvY29ycmVjdGlvblJlY3RzIGF1
dG9jb3JyZWN0aW9uUmVjdHNXaXRoUmVjdHM6YXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0Rmlyc3RS
ZWN0IGxhc3RSZWN0OmF1dG9jb3JyZWN0aW9uRGF0YS0+dGV4dExhc3RSZWN0XSA6IG5pbCk7Cisg
ICAgW2F1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyIHJlbGVhc2VdOwor
ICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyID0gbmlsOwogfQog
CiAvLyBUaGUgY29tcGxldGlvbiBoYW5kbGVyIHNob3VsZCBwYXNzIHRoZSByZWN0IG9mIHRoZSBj
b3JyZWN0aW9uIHRleHQgYWZ0ZXIgcmVwbGFjaW5nIHRoZSBpbnB1dCB0ZXh0LCBvciBuaWwgaWYg
dGhlIHJlcGxhY2VtZW50IGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQuCiAtICh2b2lkKWFwcGx5QXV0
b2NvcnJlY3Rpb246KE5TU3RyaW5nICopY29ycmVjdGlvbiB0b1N0cmluZzooTlNTdHJpbmcgKilp
bnB1dCB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFVJV0tBdXRvY29ycmVjdGlvblJl
Y3RzICpyZWN0c0ZvckNvcnJlY3Rpb24pKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgX2F1dG9j
b3JyZWN0aW9uRGF0YS5jb21wbGV0aW9uSGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5
XTsKKyAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLmF1dG9jb3JyZWN0aW9uSGFuZGxlciA9IFtjb21w
bGV0aW9uSGFuZGxlciBjb3B5XTsKICAgICBfcGFnZS0+YXBwbHlBdXRvY29ycmVjdGlvbihjb3Jy
ZWN0aW9uLCBpbnB1dCwgU3RyaW5nQ2FsbGJhY2s6OmNyZWF0ZShzZWxmLCBhdXRvY29ycmVjdGlv
blJlc3VsdCkpOwogfQogCitzdGF0aWMgdm9pZCBhdXRvY29ycmVjdGlvbkNvbnRleHQoY29uc3Qg
U3RyaW5nJiBiZWZvcmVUZXh0LCBjb25zdCBTdHJpbmcmIG1hcmtlZFRleHQsIGNvbnN0IFN0cmlu
ZyYgc2VsZWN0ZWRUZXh0LCBjb25zdCBTdHJpbmcmIGFmdGVyVGV4dCwgdWludDY0X3QgbG9jYXRp
b24sIHVpbnQ2NF90IGxlbmd0aCwgV0tFcnJvclJlZiBlcnJvciwgdm9pZCogY29udGV4dCkKK3sK
KyAgICBXS0ludGVyYWN0aW9uVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFdLSW50ZXJhY3Rpb25W
aWV3Kj4oY29udGV4dCk7CisgICAgQVNTRVJUKHZpZXcpOworICAgIFdLQXV0b0NvcnJlY3Rpb25E
YXRhICphdXRvY29ycmVjdGlvbkRhdGEgPSB2aWV3LmF1dG9jb3JyZWN0aW9uRGF0YTsKKyAgICBh
dXRvY29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uQ29udGV4dEhhbmRsZXIoW1dLQXV0b2Nv
cnJlY3Rpb25Db250ZXh0IGF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGhEYXRhOmJlZm9yZVRleHQg
bWFya2VkVGV4dDptYXJrZWRUZXh0IHNlbGVjdGVkVGV4dDpzZWxlY3RlZFRleHQgYWZ0ZXJUZXh0
OmFmdGVyVGV4dCBzZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0Ok5TTWFrZVJhbmdlKGxvY2F0aW9u
LCBsZW5ndGgpXSk7Cit9CisKIC0gKHZvaWQpcmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dFdp
dGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoVUlXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCAq
YXV0b2NvcnJlY3Rpb25Db250ZXh0KSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHJldHJpZXZlIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBXZWJQcm9jZXNzLgot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgc3lu
Y2hyb25vdXMgY2FsbCBhcyBzb29uIGFzIEtleWJvYXJkIHJlbW92ZXMgbG9ja2luZyBvZiB0aGUg
bWFpbiB0aHJlYWQuCisgICAgY29uc3QgYm9vbCB1c2VTeW5jUmVxdWVzdCA9IHRydWU7CisKKyAg
ICBpZiAodXNlU3luY1JlcXVlc3QpIHsKKyAgICAgICAgU3RyaW5nIGJlZm9yZVRleHQ7CisgICAg
ICAgIFN0cmluZyBtYXJrZWRUZXh0OworICAgICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0OworICAg
ICAgICBTdHJpbmcgYWZ0ZXJUZXh0OworICAgICAgICB1aW50NjRfdCBsb2NhdGlvbjsKKyAgICAg
ICAgdWludDY0X3QgbGVuZ3RoOworICAgICAgICBfcGFnZS0+Z2V0QXV0b2NvcnJlY3Rpb25Db250
ZXh0KGJlZm9yZVRleHQsIG1hcmtlZFRleHQsIHNlbGVjdGVkVGV4dCwgYWZ0ZXJUZXh0LCBsb2Nh
dGlvbiwgbGVuZ3RoKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW1dLQXV0b2NvcnJlY3Rp
b25Db250ZXh0IGF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGhEYXRhOmJlZm9yZVRleHQgbWFya2Vk
VGV4dDptYXJrZWRUZXh0IHNlbGVjdGVkVGV4dDpzZWxlY3RlZFRleHQgYWZ0ZXJUZXh0OmFmdGVy
VGV4dCBzZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0Ok5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5n
dGgpXSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgX2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29y
cmVjdGlvbkNvbnRleHRIYW5kbGVyID0gW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldOworICAgICAg
ICBfcGFnZS0+cmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dChBdXRvY29ycmVjdGlvbkNvbnRl
eHRDYWxsYmFjazo6Y3JlYXRlKHNlbGYsIGF1dG9jb3JyZWN0aW9uQ29udGV4dCkpOworICAgIH0K
IH0KIAogLy8gVUlXZWJGb3JtQWNjZXNzb3J5RGVsZWdhdGUKQEAgLTk0NCw3ICs5NzksNyBAQCAt
ICh2b2lkKXNldFNlbGVjdGVkVGV4dFJhbmdlOihVSVRleHRSYW5nCiAKIC0gKEJPT0wpaGFzTWFy
a2VkVGV4dAogewotICAgIHJldHVybiBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlv
biB8fCBbX21hcmtlZFRleHQgbGVuZ3RoXTsKKyAgICByZXR1cm4gW19tYXJrZWRUZXh0IGxlbmd0
aF07CiB9CiAKIC0gKE5TU3RyaW5nICopbWFya2VkVGV4dApAQCAtMTM4Niw3ICsxNDIxLDYgQEAg
LSAodm9pZClfc3RhcnRBc3Npc3RpbmdOb2RlCiAKICAgICBbc2VsZiBfc3RhcnRBc3Npc3RpbmdL
ZXlib2FyZF07CiAgICAgW3NlbGYgX3VwZGF0ZUFjY2Vzc29yeV07Ci0gICAgW3NlbGYgcmVsb2Fk
SW5wdXRWaWV3c107CiB9CiAKIC0gKHZvaWQpX3N0b3BBc3Npc3RpbmdOb2RlCkBAIC0xNjAxLDMg
KzE2MzUsMzMgQEAgKyAoV0tBdXRvY29ycmVjdGlvblJlY3RzICopYXV0b2NvcnJlY3RpbwogfQog
CiBAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0F1dG9jb3JyZWN0aW9uQ29udGV4dAorCisrIChX
S0F1dG9jb3JyZWN0aW9uQ29udGV4dCAqKWF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGhEYXRhOihO
U1N0cmluZyAqKWJlZm9yZVRleHQgbWFya2VkVGV4dDooTlNTdHJpbmcgKiltYXJrZWRUZXh0IHNl
bGVjdGVkVGV4dDooTlNTdHJpbmcgKilzZWxlY3RlZFRleHQgYWZ0ZXJUZXh0OihOU1N0cmluZyAq
KWFmdGVyVGV4dCBzZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0OihOU1JhbmdlKXJhbmdlCit7Cisg
ICAgV0tBdXRvY29ycmVjdGlvbkNvbnRleHQgKmNvbnRleHQgPVtbV0tBdXRvY29ycmVjdGlvbkNv
bnRleHQgYWxsb2NdIGluaXRdOworCisgICAgaWYgKGJlZm9yZVRleHQgJiYgW2JlZm9yZVRleHQg
bGVuZ3RoXSkKKyAgICAgICAgY29udGV4dC5jb250ZXh0QmVmb3JlU2VsZWN0aW9uID0gW2JlZm9y
ZVRleHQgY29weV07CisgICAgaWYgKHNlbGVjdGVkVGV4dCAmJiBbc2VsZWN0ZWRUZXh0IGxlbmd0
aF0pCisgICAgICAgIGNvbnRleHQuc2VsZWN0ZWRUZXh0ID0gW3NlbGVjdGVkVGV4dCBjb3B5XTsK
KyAgICBpZiAobWFya2VkVGV4dCAmJiBbbWFya2VkVGV4dCBsZW5ndGhdKQorICAgICAgICBjb250
ZXh0Lm1hcmtlZFRleHQgPSBbbWFya2VkVGV4dCBjb3B5XTsKKyAgICBpZiAoYWZ0ZXJUZXh0ICYm
IFthZnRlclRleHQgbGVuZ3RoXSkKKyAgICAgICAgY29udGV4dC5jb250ZXh0QWZ0ZXJTZWxlY3Rp
b24gPSBbYWZ0ZXJUZXh0IGNvcHldOworICAgIGNvbnRleHQucmFuZ2VJbk1hcmtlZFRleHQgPSBy
YW5nZTsKKyAgICByZXR1cm4gW2NvbnRleHQgYXV0b3JlbGVhc2VdOworfQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBbc2VsZi5jb250ZXh0QmVmb3JlU2VsZWN0aW9uIHJlbGVhc2VdOworICAg
IFtzZWxmLm1hcmtlZFRleHQgcmVsZWFzZV07CisgICAgW3NlbGYuc2VsZWN0ZWRUZXh0IHJlbGVh
c2VdOworICAgIFtzZWxmLmNvbnRleHRBZnRlclNlbGVjdGlvbiByZWxlYXNlXTsKKworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDE2MTI5OSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDksNiArMjA5LDE3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjphdXRvY29ycmVjdGlvbkRh
dGFDYWwKICAgICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKHJlY3Rz
LCBmb250TmFtZSwgZm9udFNpemUsIGZvbnRUcmFpdHMpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94
eTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0Q2FsbGJhY2soY29uc3QgU3RyaW5nJiBiZWZvcmVUZXh0
LCBjb25zdCBTdHJpbmcmIG1hcmtlZFRleHQsIGNvbnN0IFN0cmluZyYgc2VsZWN0ZWRUZXh0LCBj
b25zdCBTdHJpbmcmIGFmdGVyVGV4dCwgdWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0
aCwgdWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICBSZWZQdHI8QXV0b2NvcnJlY3Rpb25Db250
ZXh0Q2FsbGJhY2s+IGNhbGxiYWNrID0gbV9hdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFja3Mu
dGFrZShjYWxsYmFja0lEKTsKKyAgICBpZiAoIWNhbGxiYWNrKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2stPnBl
cmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShiZWZvcmVUZXh0LCBtYXJrZWRUZXh0LCBzZWxl
Y3RlZFRleHQsIGFmdGVyVGV4dCwgbG9jYXRpb24sIGxlbmd0aCk7Cit9CisKIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwg
V2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJlVHlw
ZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBQYXNzUmVmUHRyPEdlc3R1cmVDYWxsYmFjaz4gY2Fs
bGJhY2spCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKQEAgLTI1Nyw2ICsyNjgsMjMgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmFwcGx5QXV0b2NvcnJlY3Rpb24oYwogICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6QXBwbHlBdXRvY29ycmVjdGlvbihjb3JyZWN0aW9uLCBvcmln
aW5hbFRleHQsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5
OjpyZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KFBhc3NSZWZQdHI8QXV0b2NvcnJlY3Rpb25D
b250ZXh0Q2FsbGJhY2s+IGNhbGxiYWNrKQoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAg
ICAgIGNhbGxiYWNrLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB1aW50NjRfdCBjYWxsYmFja0lEID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKKyAgICBtX2F1
dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgY2FsbGJhY2spOwor
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVxdWVzdEF1dG9jb3JyZWN0
aW9uQ29udGV4dChjYWxsYmFja0lEKSwgbV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94
eTo6Z2V0QXV0b2NvcnJlY3Rpb25Db250ZXh0KFN0cmluZyYgYmVmb3JlQ29udGV4dCwgU3RyaW5n
JiBtYXJrZWRUZXh0LCBTdHJpbmcmIHNlbGVjdGVkVGV4dCwgU3RyaW5nJiBhZnRlckNvbnRleHQs
IHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCkKK3sKKyAgICBtX3Byb2Nlc3Mt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRBdXRvY29ycmVjdGlvbkNvbnRleHQoKSwg
TWVzc2FnZXM6OldlYlBhZ2U6OkdldEF1dG9jb3JyZWN0aW9uQ29udGV4dDo6UmVwbHkoYmVmb3Jl
Q29udGV4dCwgbWFya2VkVGV4dCwgc2VsZWN0ZWRUZXh0LCBhZnRlckNvbnRleHQsIGxvY2F0aW9u
LCBsZW5ndGgpLCBtX3BhZ2VJRCk7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RXaXRo
VHdvVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBmcm9tLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCB0bywgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwg
UGFzc1JlZlB0cjxHZXN0dXJlQ2FsbGJhY2s+IGNhbGxiYWNrKQogewogICAgIGlmICghaXNWYWxp
ZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgJKHJldmlzaW9uIDE2MTI5OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxNiw2ICs0MTYsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBlbGVtZW50RGlkQmx1cihXZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCByZXF1ZXN0
QXV0b2NvcnJlY3Rpb25EYXRhKGNvbnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0aW9uLCB1
aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGFwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3Qg
U3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgdWludDY0X3Qg
Y2FsbGJhY2tJRCk7CisgICAgdm9pZCByZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KHVpbnQ2
NF90IGNhbGxiYWNrSUQpOworICAgIHZvaWQgZ2V0QXV0b2NvcnJlY3Rpb25Db250ZXh0KFN0cmlu
ZyYgYmVmb3JlVGV4dCwgU3RyaW5nJiBtYXJrZWRUZXh0LCBTdHJpbmcmIHNlbGVjdGVkVGV4dCwg
U3RyaW5nJiBhZnRlclRleHQsIHVpbnQ2NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7
CiAgICAgdm9pZCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKTsKICAgICB2b2lk
IHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBv
c2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWlu
dDY0X3Qgc2VsZWN0aW9uRW5kKTsKICAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbigpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDE2MTI5OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0
Nyw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIEV4dGVuZFNl
bGVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSkKICAgICBSZXF1ZXN0QXV0b2NvcnJlY3Rpb25E
YXRhKFN0cmluZyB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb24sIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAg
ICAgQXBwbHlBdXRvY29ycmVjdGlvbihTdHJpbmcgY29ycmVjdGlvbiwgU3RyaW5nIG9yaWdpbmFs
VGV4dCwgdWludDY0X3QgY2FsbGJhY2tJRCkKKyAgICBSZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250
ZXh0KHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgR2V0QXV0b2NvcnJlY3Rpb25Db250ZXh0KCkg
LT4gKFN0cmluZyBiZWZvcmVDb250ZXh0LCBTdHJpbmcgbWFya2VkVGV4dCwgU3RyaW5nIHNlbGVj
dGVkVGV4dCwgU3RyaW5nIGFmdGVyQ29udGV4dCwgdWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90
IGxlbmd0aCkgCiAgICAgSW5zZXJ0VGV4dChTdHJpbmcgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1l
bnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKQogICAgIFNldENvbXBv
c2l0aW9uKFN0cmluZyB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+
IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25F
bmQpCiAgICAgQ29uZmlybUNvbXBvc2l0aW9uKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE2MTI5
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNzIyLDYgKzcyMiw4NyBAQCB2b2lkIFdlYlBhZ2U6OmFwcGx5
QXV0b2NvcnJlY3Rpb24oY29uc3QgCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpT
dHJpbmdDYWxsYmFjayhjb3JyZWN0aW9uLCBjYWxsYmFja0lEKSk7CiB9CiAKK3N0YXRpYyB2b2lk
IGNvbXB1dGVBdXRvY29ycmVjdGlvbkNvbnRleHQoRnJhbWUmIGZyYW1lLCBTdHJpbmcmIGNvbnRl
eHRCZWZvcmUsIFN0cmluZyYgbWFya2VkVGV4dCwgU3RyaW5nJiBzZWxlY3RlZFRleHQsIFN0cmlu
ZyYgY29udGV4dEFmdGVyLCBOU1JhbmdlJiBzZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0KQorewor
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRp
b24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFZpc2libGVQ
b3NpdGlvbiBlbmRQb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgp
OworICAgIHNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQgPSBOU01ha2VSYW5nZShOU05vdEZvdW5k
LCAwKTsKKyAgICBjb25zdCB1bnNpZ25lZCBtaW5Db250ZXh0V29yZENvdW50ID0gMzsKKyAgICBj
b25zdCB1bnNpZ25lZCBtaW5Db250ZXh0TGVuZ2h0ID0gMTI7CisgICAgY29uc3QgdW5zaWduZWQg
bWF4Q29udGV4dExlbmd0aCA9IDMwOworCisgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkKKyAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0KGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworCisgICAgaWYgKGZyYW1l
LmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKCpmcmFtZS5kb2N1bWVudCgpLCBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkt
PnN0YXJ0UG9zaXRpb24oKSwgc3RhcnRQb3NpdGlvbik7CisgICAgICAgIFN0cmluZyBtYXJrZWRU
ZXh0QmVmb3JlOworICAgICAgICBpZiAocmFuZ2UpCisgICAgICAgICAgICBtYXJrZWRUZXh0QmVm
b3JlID0gcGxhaW5UZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKCpmcmFtZS5kb2N1bWVudCgpLCBlbmRQb3NpdGlvbiwgZnJhbWUuZWRpdG9yKCkuY29tcG9z
aXRpb25SYW5nZSgpLT5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAgU3RyaW5nIG1hcmtlZFRleHRB
ZnRlcjsKKyAgICAgICAgaWYgKHJhbmdlKQorICAgICAgICAgICAgbWFya2VkVGV4dEFmdGVyID0g
cGxhaW5UZXh0KHJhbmdlLmdldCgpKTsKKyAgICAgICAgbWFya2VkVGV4dCA9IG1hcmtlZFRleHRC
ZWZvcmUgKyBzZWxlY3RlZFRleHQgKyBtYXJrZWRUZXh0QWZ0ZXI7CisgICAgICAgIGlmICghbWFy
a2VkVGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRl
eHQubG9jYXRpb24gPSBtYXJrZWRUZXh0QmVmb3JlLmxlbmd0aCgpOworICAgICAgICAgICAgc2Vs
ZWN0ZWRSYW5nZUluTWFya2VkVGV4dC5sZW5ndGggPSBzZWxlY3RlZFRleHQubGVuZ3RoKCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiAhPSBzdGFy
dE9mRWRpdGFibGVDb250ZW50KHN0YXJ0UG9zaXRpb24pKSB7CisgICAgICAgICAgICBWaXNpYmxl
UG9zaXRpb24gY3VycmVudFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBwcmV2aW91c1Bvc2l0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgdG90
YWxDb250ZXh0TGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtaW5Db250ZXh0V29yZENvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4
dEJlZm9yZS5sZW5ndGgoKSA+PSBtaW5Db250ZXh0TGVuZ2h0KQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBwcmV2aW91c1Bvc2l0aW9uID0gc3RhcnRPZldvcmQo
cG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBXb3Jk
R3JhbnVsYXJpdHksIERpcmVjdGlvbkJhY2t3YXJkKSk7CisgICAgICAgICAgICAgICAgaWYgKHBy
ZXZpb3VzUG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChSYW5nZTo6Y3JlYXRl
KCpmcmFtZS5kb2N1bWVudCgpLCBwcmV2aW91c1Bvc2l0aW9uLCBjdXJyZW50UG9zaXRpb24pLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICB0b3RhbENvbnRleHRMZW5ndGggKz0gY3VycmVudFdvcmQu
bGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgaWYgKHRvdGFsQ29udGV4dExlbmd0aCA+PSBtYXhD
b250ZXh0TGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50UG9zaXRpb24gPSBwcmV2aW91c1Bvc2l0aW9uOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiBjdXJyZW50UG9zaXRp
b24gIT0gc3RhcnRQb3NpdGlvbikgeworICAgICAgICAgICAgICAgIGNvbnRleHRCZWZvcmUgPSBw
bGFpblRleHQoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgY3VycmVudFBvc2l0aW9u
LCBzdGFydFBvc2l0aW9uKS5nZXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGF0Qm91bmRhcnlP
ZkdyYW51bGFyaXR5KGN1cnJlbnRQb3NpdGlvbiwgUGFyYWdyYXBoR3JhbnVsYXJpdHksIERpcmVj
dGlvbkJhY2t3YXJkKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dEJlZm9yZSA9IEFTQ0lJ
TGl0ZXJhbCgiXG4gIikgKyBjb250ZXh0QmVmb3JlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKGVuZFBvc2l0aW9uICE9IGVuZE9mRWRpdGFibGVDb250ZW50KGVuZFBv
c2l0aW9uKSkgeworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRQb3NpdGlvbjsKKyAg
ICAgICAgICAgIGlmICghYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoZW5kUG9zaXRpb24sIFdvcmRH
cmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCkgJiYgd2l0aGluVGV4dFVuaXRPZkdyYW51bGFy
aXR5KGVuZFBvc2l0aW9uLCBXb3JkR3JhbnVsYXJpdHksIERpcmVjdGlvbkZvcndhcmQpKQorICAg
ICAgICAgICAgICAgIG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51
bGFyaXR5KGVuZFBvc2l0aW9uLCBXb3JkR3JhbnVsYXJpdHksIERpcmVjdGlvbkZvcndhcmQpOwor
ICAgICAgICAgICAgaWYgKG5leHRQb3NpdGlvbi5pc05vdE51bGwoKSkKKyAgICAgICAgICAgICAg
ICBjb250ZXh0QWZ0ZXIgPSBwbGFpblRleHQoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgZW5kUG9zaXRpb24sIG5leHRQb3NpdGlvbikuZ2V0KCkpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHQodWludDY0X3Qg
Y2FsbGJhY2tJRCkKK3sKKyAgICBTdHJpbmcgY29udGV4dEJlZm9yZTsKKyAgICBTdHJpbmcgY29u
dGV4dEFmdGVyOworICAgIFN0cmluZyBzZWxlY3RlZFRleHQ7CisgICAgU3RyaW5nIG1hcmtlZFRl
eHQ7CisgICAgTlNSYW5nZSBzZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0OworICAgIGNvbXB1dGVB
dXRvY29ycmVjdGlvbkNvbnRleHQobV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JN
YWluRnJhbWUoKSwgY29udGV4dEJlZm9yZSwgbWFya2VkVGV4dCwgc2VsZWN0ZWRUZXh0LCBjb250
ZXh0QWZ0ZXIsIHNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQpOworCisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjayhjb250ZXh0QmVm
b3JlLCBtYXJrZWRUZXh0LCBzZWxlY3RlZFRleHQsIGNvbnRleHRBZnRlciwgc2VsZWN0ZWRSYW5n
ZUluTWFya2VkVGV4dC5sb2NhdGlvbiwgc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dC5sZW5ndGgs
IGNhbGxiYWNrSUQpKTsKK30KKwordm9pZCBXZWJQYWdlOjpnZXRBdXRvY29ycmVjdGlvbkNvbnRl
eHQoU3RyaW5nJiBjb250ZXh0QmVmb3JlLCBTdHJpbmcmIG1hcmtlZFRleHQsIFN0cmluZyYgc2Vs
ZWN0ZWRUZXh0LCBTdHJpbmcmIGNvbnRleHRBZnRlciwgdWludDY0X3QmIGxvY2F0aW9uLCB1aW50
NjRfdCYgbGVuZ3RoKQoreworICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dDsK
KyAgICBjb21wdXRlQXV0b2NvcnJlY3Rpb25Db250ZXh0KG1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCksIGNvbnRleHRCZWZvcmUsIG1hcmtlZFRleHQsIHNlbGVj
dGVkVGV4dCwgY29udGV4dEFmdGVyLCBzZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0KTsKKyAgICBs
b2NhdGlvbiA9IHNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQubG9jYXRpb247CisgICAgbGVuZ3Ro
ID0gc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dC5sZW5ndGg7Cit9CisKIHZvaWQgV2ViUGFnZTo6
ZWxlbWVudERpZEZvY3VzKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCiB7CiAgICAgbV9hc3Npc3RlZE5v
ZGUgPSBub2RlOwo=
</data>
<flag name="review"
          id="244063"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>