<?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>121100</bug_id>
          
          <creation_ts>2013-09-10 09:58:48 -0700</creation_ts>
          <short_desc>[Windows] Revise GDI Create Functions to use GDIObject Smart Pointer</short_desc>
          <delta_ts>2013-09-11 13:30:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>120778</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>andersca</cc>
    
    <cc>bfulgham</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>927355</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-10 09:58:48 -0700</bug_when>
    <thetext>Revise various Windows create functions to use GDIObject smart pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927509</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-10 14:40:23 -0700</bug_when>
    <thetext>1. Change FontPlatformData to take a GDIObject&lt;HFONT&gt; and use std::move.
2. &apos;createGDIFont&apos; should return a GDIObject&lt;HFONT&gt; - as should any other create functions we have that return GDI objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927516</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-09-10 14:43:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/14958562&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927934</commentid>
    <comment_count>3</comment_count>
      <attachid>211341</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-11 12:42:36 -0700</bug_when>
    <thetext>Created attachment 211341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927936</commentid>
    <comment_count>4</comment_count>
      <attachid>211341</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-09-11 12:47:13 -0700</bug_when>
    <thetext>Comment on attachment 211341
Patch

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

&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:491
&gt; +        return GDIObject&lt;HFONT&gt;();

If you add a GDIObject constructor that takes std::nullptr_t you can just return nullptr here.

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataWin.cpp:58
&gt; +    ::SelectObject(hdc, m_font.get()-&gt;get());

I think SharedGDIObject’s get function should just return T, then this would just be m_font.get().

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataWin.cpp:69
&gt; +        platformDataInit(m_font.get()-&gt;get(), size, hdc, faceName);

Same thing here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927951</commentid>
    <comment_count>5</comment_count>
      <attachid>211341</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-11 13:18:55 -0700</bug_when>
    <thetext>Comment on attachment 211341
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:491
&gt;&gt; +        return GDIObject&lt;HFONT&gt;();
&gt; 
&gt; If you add a GDIObject constructor that takes std::nullptr_t you can just return nullptr here.

Great!  I&apos;ll do that.

&gt;&gt; Source/WebCore/platform/graphics/win/FontPlatformDataWin.cpp:58
&gt;&gt; +    ::SelectObject(hdc, m_font.get()-&gt;get());
&gt; 
&gt; I think SharedGDIObject’s get function should just return T, then this would just be m_font.get().

m_font is a RefPtr; SharedGDIObject.get() already returns T.  I should have written this as ::SelectObject(hdc, m_font-&gt;get());

&gt;&gt; Source/WebCore/platform/graphics/win/FontPlatformDataWin.cpp:69
&gt;&gt; +        platformDataInit(m_font.get()-&gt;get(), size, hdc, faceName);
&gt; 
&gt; Same thing here.

OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927957</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-11 13:30:49 -0700</bug_when>
    <thetext>Committed r155557: &lt;http://trac.webkit.org/changeset/155557&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211341</attachid>
            <date>2013-09-11 12:42:36 -0700</date>
            <delta_ts>2013-09-11 13:18:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121100-20130911124226.patch</filename>
            <type>text/plain</type>
            <size>26899</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTU1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTA5LTExICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dzXSBSZXZpc2Ug
R0RJIENyZWF0ZSBGdW5jdGlvbnMgdG8gdXNlIEdESU9iamVjdCBTbWFydCBQb2ludGVyLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMTAwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmg6IFVzZSBHRElPYmplY3QgaW5zdGVhZCBvZiBiYXJl
IHBvaW50ZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHRElGb250KTogTm8gbG9uZ2VyIG5lZWQgdG8g
bGVhayB0aGUgcG9pbnRlcjsgdXNlIG1vdmUgc2VtYW50aWMKKyAgICAgICAgdG8gcGFzcyBvd25l
cnNoaXAgdG8gRm9udFBsYXRmb3JtRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3Rv
bVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6IFVzZSBtb3ZlIG9wZXJhdGlvbi4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0
Zm9ybURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpmaWxsKTogVXNlIEhXbmREQyBzbWFydCBwb2ludGVy
IGluc3RlYWQgb2YgYmFyZSBIREMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Np
bXBsZUZvbnREYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKTogVXNlIG1vdmUgb3BlcmF0aW9uLgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjph
bGxvY0ltYWdlKTogQ2hhbmdlIHRvIHVzZSBHRElPYmplY3QuCisgICAgICAgIChXZWJDb3JlOjpz
Y2FsZURyYWdJbWFnZSk6IFVzZSBzbWFydCBwb2ludGVycyB0byBhdm9pZCBtYW51YWwgZGVhbGxv
Y3MuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOiBEaXR0by4K
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fpcm9XaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6YWxsb2NJbWFnZSk6IENoYW5nZSB0byB1c2UgR0RJT2JqZWN0LgorICAgICAgICAo
V2ViQ29yZTo6c2NhbGVEcmFnSW1hZ2UpOiBVc2Ugc21hcnQgcG9pbnRlcnMgdG8gYXZvaWQgbWFu
dWFsIGRlYWxsb2NzLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdl
KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKTogVXBkYXRlIGZvciBHRElPYmpl
Y3QuCisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQb3B1cE1lbnVXaW46OlBvcHVwTWVudVdpbik6IFN3aXRjaCB0byBHRElPYmplY3Qu
CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46On5Qb3B1cE1lbnVXaW4pOiBSZW1vdmUg
dW5lZWRlZCBkZWFsbG9jcy4KKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6cGFpbnQp
OiBVcGRhdGUgZm9yIEdESU9iamVjdC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51
V2luLmg6IFVzZSBzbWFydCBwb2ludGVycyBpbnN0ZWFkIG9mIGJhcmUgR0RJIG9iamVjdHMuCisK
IDIwMTMtMDktMTEgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggbmVzdGVkIHVuaWNvZGUtYmlkaTogaXNvbGF0ZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2
aXNpb24gMTU1NTUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBs
YXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTEgKzEwMSwxMSBAQCBwdWJsaWM6
CiAjZW5kaWYKICNlbmRpZgogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBGb250UGxhdGZvcm1EYXRh
KEhGT05ULCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2Js
aXF1ZSwgYm9vbCB1c2VHREkpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05U
PiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUs
IGJvb2wgdXNlR0RJKTsKICNpZiBVU0UoQ0cpCi0gICAgRm9udFBsYXRmb3JtRGF0YShIRk9OVCwg
Q0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGlj
T2JsaXF1ZSwgYm9vbCB1c2VHREkpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhG
T05UPiwgQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljT2JsaXF1ZSwgYm9vbCB1c2VHREkpOwogI2VsaWYgVVNFKENBSVJPKQotICAgIEZvbnRQ
bGF0Zm9ybURhdGEoSEZPTlQsIGNhaXJvX2ZvbnRfZmFjZV90KiwgZmxvYXQgc2l6ZSwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYyk7CisgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+
LCBjYWlyb19mb250X2ZhY2VfdCosIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMp
OwogI2VuZGlmCiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHJldmlzaW9uIDE1NTU1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NDEsNyArNDQxLDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyBtYXRj
aEltcHJvdmluZ0VudW1QcgogICAgIHJldHVybiAxOwogfQogCi1zdGF0aWMgSEZPTlQgY3JlYXRl
R0RJRm9udChjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgTE9ORyBkZXNpcmVkV2VpZ2h0LCBi
b29sIGRlc2lyZWRJdGFsaWMsIGludCBzaXplLCBib29sIHN5bnRoZXNpemVJdGFsaWMpCitzdGF0
aWMgR0RJT2JqZWN0PEhGT05UPiBjcmVhdGVHRElGb250KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBMT05HIGRlc2lyZWRXZWlnaHQsIGJvb2wgZGVzaXJlZEl0YWxpYywgaW50IHNpemUsIGJv
b2wgc3ludGhlc2l6ZUl0YWxpYykKIHsKICAgICBIV25kREMgaGRjKDApOwogCkBAIC00NTYsNyAr
NDU2LDcgQEAgc3RhdGljIEhGT05UIGNyZWF0ZUdESUZvbnQoY29uc3QgQXRvbWljUwogICAgIEVu
dW1Gb250RmFtaWxpZXNFeChoZGMsICZsb2dGb250LCBtYXRjaEltcHJvdmluZ0VudW1Qcm9jLCBy
ZWludGVycHJldF9jYXN0PExQQVJBTT4oJm1hdGNoRGF0YSksIDApOwogCiAgICAgaWYgKCFtYXRj
aERhdGEubV9oYXNNYXRjaGVkKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIEdE
SU9iamVjdDxIRk9OVD4oKTsKIAogICAgIG1hdGNoRGF0YS5tX2Nob3Nlbi5sZkhlaWdodCA9IC1z
aXplOwogICAgIG1hdGNoRGF0YS5tX2Nob3Nlbi5sZldpZHRoID0gMDsKQEAgLTQ3OCw3ICs0Nzgs
NyBAQCBzdGF0aWMgSEZPTlQgY3JlYXRlR0RJRm9udChjb25zdCBBdG9taWNTCiAKICAgICBhdXRv
IGNob3NlbkZvbnQgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmbWF0Y2hE
YXRhLm1fY2hvc2VuKSk7CiAgICAgaWYgKCFjaG9zZW5Gb250KQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIEdESU9iamVjdDxIRk9OVD4oKTsKIAogICAgIEhXbmREQyBkYygwKTsK
ICAgICBTYXZlREMoZGMpOwpAQCAtNDg4LDkgKzQ4OCw5IEBAIHN0YXRpYyBIRk9OVCBjcmVhdGVH
RElGb250KGNvbnN0IEF0b21pY1MKICAgICBSZXN0b3JlREMoZGMsIC0xKTsKIAogICAgIGlmICh3
Y3NpY21wKG1hdGNoRGF0YS5tX2Nob3Nlbi5sZkZhY2VOYW1lLCBhY3R1YWxOYW1lKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBHRElPYmplY3Q8SEZPTlQ+KCk7CiAKLSAgICBy
ZXR1cm4gY2hvc2VuRm9udC5sZWFrKCk7CisgICAgcmV0dXJuIGNob3NlbkZvbnQ7CiB9CiAKIHN0
cnVjdCBUcmFpdHNJbkZhbWlseVByb2NEYXRhIHsKQEAgLTU1Myw4ICs1NTMsOCBAQCBQYXNzT3du
UHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6CiAgICAgLy8gRklYTUU6IFdlIHdpbGwg
ZXZlbnR1YWxseSB3YW50IHN1YnBpeGVsIHByZWNpc2lvbiBmb3IgR0RJIG1vZGUsIGJ1dCB0aGUg
c2NhbGVkIHJlbmRlcmluZyBkb2Vzbid0CiAgICAgLy8gbG9vayBhcyBuaWNlLiBUaGF0IG1heSBi
ZSBzb2x2YWJsZSB0aG91Z2guCiAgICAgTE9ORyB3ZWlnaHQgPSBhZGp1c3RlZEdESUZvbnRXZWln
aHQodG9HRElGb250V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSksIGZhbWlseSk7Ci0g
ICAgYXV0byBoZm9udCA9IGFkb3B0R0RJT2JqZWN0KGNyZWF0ZUdESUZvbnQoZmFtaWx5LCB3ZWln
aHQsIGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSwKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLmNv
bXB1dGVkUGl4ZWxTaXplKCkgKiAodXNlR0RJID8gMSA6IDMyKSwgdXNlR0RJKSk7CisgICAgYXV0
byBoZm9udCA9IGNyZWF0ZUdESUZvbnQoZmFtaWx5LCB3ZWlnaHQsIGZvbnREZXNjcmlwdGlvbi5p
dGFsaWMoKSwKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkgKiAo
dXNlR0RJID8gMSA6IDMyKSwgdXNlR0RJKTsKIAogICAgIGlmICghaGZvbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtNTY4LDcgKzU2OCw3IEBAIFBhc3NPd25QdHI8Rm9udFBsYXRmb3Jt
RGF0YT4gRm9udENhY2hlOjoKICAgICBib29sIHN5bnRoZXNpemVCb2xkID0gaXNHRElGb250V2Vp
Z2h0Qm9sZCh3ZWlnaHQpICYmICFpc0dESUZvbnRXZWlnaHRCb2xkKGxvZ0ZvbnQubGZXZWlnaHQp
OwogICAgIGJvb2wgc3ludGhlc2l6ZUl0YWxpYyA9IGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSAm
JiAhbG9nRm9udC5sZkl0YWxpYzsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHJlc3VsdCA9IG5l
dyBGb250UGxhdGZvcm1EYXRhKGhmb250LmdldCgpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQ
aXhlbFNpemUoKSwgc3ludGhlc2l6ZUJvbGQsIHN5bnRoZXNpemVJdGFsaWMsIHVzZUdESSk7Cisg
ICAgRm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0gbmV3IEZvbnRQbGF0Zm9ybURhdGEoc3RkOjpt
b3ZlKGhmb250KSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXNp
emVCb2xkLCBzeW50aGVzaXplSXRhbGljLCB1c2VHREkpOwogCiAjaWYgVVNFKENHKQogICAgIGJv
b2wgZm9udENyZWF0aW9uRmFpbGVkID0gIXJlc3VsdC0+Y2dGb250KCk7CkBAIC01ODQsOCArNTg0
LDYgQEAgUGFzc093blB0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OgogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9ICAgICAgICAKIAotICAgIGhmb250LmxlYWsoKTsgLy8gcmVz
dWx0IG5vdyBvd25zIHRoZSBIRk9OVC4KLQogICAgIHJldHVybiBhZG9wdFB0cihyZXN1bHQpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAxNTU1NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgRm9udFBsYXRmb3Jt
RGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogICAgIGF1dG8gaGZvbnQgPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmbG9nRm9udCkpOwogCiAgICAgUmV0YWluUHRyPENH
Rm9udFJlZj4gY2dGb250ID0gYWRvcHRDRihDR0ZvbnRDcmVhdGVXaXRoUGxhdGZvcm1Gb250KCZs
b2dGb250KSk7Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQubGVhaygpLCBjZ0Zv
bnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVyaW5nTW9kZSA9PSBBbHRlcm5hdGVS
ZW5kZXJpbmdNb2RlKTsKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShzdGQ6Om1vdmUoaGZv
bnQpLCBjZ0ZvbnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVyaW5nTW9kZSA9PSBB
bHRlcm5hdGVSZW5kZXJpbmdNb2RlKTsKIH0KIAogLy8gQ3JlYXRlcyBhIHVuaXF1ZSBhbmQgdW5w
cmVkaWN0YWJsZSBmb250IG5hbWUsIGluIG9yZGVyIHRvIGF2b2lkIGNvbGxpc2lvbnMgYW5kIHRv
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24g
MTU1NTUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAg
Rm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogCiAgICAgY2Fpcm9fZm9u
dF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZv
bnQoaGZvbnQuZ2V0KCkpOwogCi0gICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRh
KGhmb250LmxlYWsoKSwgZm9udEZhY2UsIHNpemUsIGJvbGQsIGl0YWxpYyk7CisgICAgRm9udFBs
YXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKHN0ZDo6bW92ZShoZm9udCksIGZvbnRGYWNlLCBz
aXplLCBib2xkLCBpdGFsaWMpOwogCiAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZm9udEZh
Y2UpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAkocmV2aXNpb24gMTU1NTUx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwxMyArMTE1LDEzIEBAIHZvaWQgRm9u
dFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCgKICAgICBtX2NnRm9udCA9IGFkb3B0Q0Yo
Q0dGb250Q3JlYXRlV2l0aFBsYXRmb3JtRm9udCgmbG9nZm9udCkpOwogfQogCi1Gb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEhGT05UIGhmb250LCBDR0ZvbnRSZWYgZm9udCwgZmxv
YXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQorRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250LCBDR0ZvbnRS
ZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJ
KQogICAgIDogbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUo
b2JsaXF1ZSkKICAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKICAgICAsIG1fc2l6ZShz
aXplKQogICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxhcldpZHRoKQotICAgICwgbV9mb250KFNo
YXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShhZG9wdEdESU9iamVjdDxIRk9OVD4oaGZvbnQp
KSkKKyAgICAsIG1fZm9udChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoc3RkOjptb3Zl
KGhmb250KSkpCiAgICAgLCBtX2NnRm9udChmb250KQogICAgICwgbV9pc0NvbG9yQml0bWFwRm9u
dChmYWxzZSkKICAgICAsIG1fdXNlR0RJKHVzZUdESSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAxNTU1NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTYsOCArNTYsOCBAQCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0
YUluaXQoCiAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZm9udEZhY2UpOwogfQogCi1Gb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEhGT05UIGZvbnQsIGNhaXJvX2ZvbnRfZmFj
ZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCi0gICAg
OiBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKGFkb3B0R0RJT2JqZWN0PEhG
T05UPihmb250KSkpCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVj
dDxIRk9OVD4gZm9udCwgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlLCBmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9udChTaGFyZWRHRElPYmplY3Q8SEZP
TlQ+OjpjcmVhdGUoc3RkOjptb3ZlKGZvbnQpKSkKICAgICAsIG1fc2l6ZShzaXplKQogICAgICwg
bV9vcmllbnRhdGlvbihIb3Jpem9udGFsKQogICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxhcldp
ZHRoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0
Zm9ybURhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAkocmV2aXNpb24gMTU1NTUxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw4IEBAIHVzaW5nIHN0ZDo6bWluOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
SEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNl
R0RJKQotICAgIDogbV9mb250KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShhZG9wdEdE
SU9iamVjdDxIRk9OVD4oZm9udCkpKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShHRElPYmplY3Q8SEZPTlQ+IGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxp
cXVlLCBib29sIHVzZUdESSkKKyAgICA6IG1fZm9udChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+Ojpj
cmVhdGUoc3RkOjptb3ZlKGZvbnQpKSkKICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9vcmll
bnRhdGlvbihIb3Jpem9udGFsKQogICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxhcldpZHRoKQpA
QCAtNTUsNyArNTUsNyBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEhGT05U
CiAgICAgSFduZERDIGhkYygwKTsKICAgICBTYXZlREMoaGRjKTsKICAgICAKLSAgICBTZWxlY3RP
YmplY3QoaGRjLCBmb250KTsKKyAgICA6OlNlbGVjdE9iamVjdChoZGMsIG1fZm9udC5nZXQoKS0+
Z2V0KCkpOwogICAgIFVJTlQgYnVmZmVyU2l6ZSA9IEdldE91dGxpbmVUZXh0TWV0cmljcyhoZGMs
IDAsIE5VTEwpOwogCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShidWZmZXJTaXplLCAiQml0bWFw
IGZvbnRzIG5vdCBzdXBwb3J0ZWQgd2l0aCBDb3JlR3JhcGhpY3MuIik7CkBAIC02Niw3ICs2Niw3
IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoSEZPTlQKICAgICAgICAgR2V0
T3V0bGluZVRleHRNZXRyaWNzVyhoZGMsIGJ1ZmZlclNpemUsIG1ldHJpY3MpOwogICAgICAgICBX
Q0hBUiogZmFjZU5hbWUgPSAoV0NIQVIqKSgodWludHB0cl90KW1ldHJpY3MgKyAodWludHB0cl90
KW1ldHJpY3MtPm90bXBGYWNlTmFtZSk7CiAKLSAgICAgICAgcGxhdGZvcm1EYXRhSW5pdChmb250
LCBzaXplLCBoZGMsIGZhY2VOYW1lKTsKKyAgICAgICAgcGxhdGZvcm1EYXRhSW5pdChtX2ZvbnQu
Z2V0KCktPmdldCgpLCBzaXplLCBoZGMsIGZhY2VOYW1lKTsKIAogICAgICAgICBmcmVlKG1ldHJp
Y3MpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
bHlwaFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAJKHJl
dmlzaW9uIDE1NTU1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
bHlwaFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuCiAKICAgICBib29s
IGhhdmVHbHlwaHMgPSBmYWxzZTsKIAotICAgIEhEQyBkYyA9IEdldERDKChIV05EKTApOworICAg
IEhXbmREQyBkYygwKTsKICAgICBTYXZlREMoZGMpOwogICAgIFNlbGVjdE9iamVjdChkYywgZm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCkpOwogCkBAIC02MSw3ICs2MSw2IEBAIGJvb2wg
R2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW4KICAgICAgICAgfQogICAgIH0KICAg
ICBSZXN0b3JlREMoZGMsIC0xKTsKLSAgICBSZWxlYXNlREMoMCwgZGMpOwogCiAgICAgcmV0dXJu
IGhhdmVHbHlwaHM7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHJldmlzaW9uIDE1NTU1
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0
YVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgR2V0T2JqZWN0KG1fcGxhdGZvcm1EYXRh
Lmhmb250KCksIHNpemVvZihMT0dGT05UKSwgJndpbmZvbnQpOwogICAgIHdpbmZvbnQubGZIZWln
aHQgPSAtbHJvdW5kZihzY2FsZWRTaXplICogKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpID8gMSA6
IDMyKSk7CiAgICAgYXV0byBoZm9udCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRm9udEluZGly
ZWN0KCZ3aW5mb250KSk7Ci0gICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBs
YXRmb3JtRGF0YShoZm9udC5sZWFrKCksIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3Jt
RGF0YS51c2VHREkoKSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CisgICAgcmV0dXJuIFNpbXBs
ZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShzdGQ6Om1vdmUoaGZvbnQpLCBzY2Fs
ZWRTaXplLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5
bnRoZXRpY09ibGlxdWUoKSwgbV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpLCBpc0N1c3RvbUZvbnQo
KSwgZmFsc2UpOwogfQogCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAJKHJldmlzaW9uIDE1
NTU1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSwxMiBAQCB2b2lkIGRlYWxsb2NDb250ZXh0KENH
Q29udGV4dFJlZiB0YXJnZXQpCiAgICAgQ0dDb250ZXh0UmVsZWFzZSh0YXJnZXQpOwogfQogCi1I
QklUTUFQIGFsbG9jSW1hZ2UoSERDIGRjLCBJbnRTaXplIHNpemUsIENHQ29udGV4dFJlZiAqdGFy
Z2V0UmVmKQorR0RJT2JqZWN0PEhCSVRNQVA+IGFsbG9jSW1hZ2UoSERDIGRjLCBJbnRTaXplIHNp
emUsIENHQ29udGV4dFJlZiAqdGFyZ2V0UmVmKQogewogICAgIEJpdG1hcEluZm8gYm1wSW5mbyA9
IEJpdG1hcEluZm86OmNyZWF0ZShzaXplKTsKIAogICAgIExQVk9JRCBiaXRzOwotICAgIEhCSVRN
QVAgaGJtcCA9IENyZWF0ZURJQlNlY3Rpb24oZGMsICZibXBJbmZvLCBESUJfUkdCX0NPTE9SUywg
JmJpdHMsIDAsIDApOworICAgIGF1dG8gaGJtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElC
U2VjdGlvbihkYywgJmJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmYml0cywgMCwgMCkpOwogCiAg
ICAgaWYgKCF0YXJnZXRSZWYpCiAgICAgICAgIHJldHVybiBoYm1wOwpAQCAtNTgsMTAgKzU4LDgg
QEAgSEJJVE1BUCBhbGxvY0ltYWdlKEhEQyBkYywgSW50U2l6ZSBzaXplLAogICAgIENHQ29udGV4
dFJlZiBiaXRtYXBDb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJpdHMsIGJtcEluZm8u
Ym1pSGVhZGVyLmJpV2lkdGgsIGJtcEluZm8uYm1pSGVhZGVyLmJpSGVpZ2h0LCA4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJtcEluZm8u
Ym1pSGVhZGVyLmJpV2lkdGggKiA0LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHQml0bWFw
Qnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdCk7Ci0gICAgaWYg
KCFiaXRtYXBDb250ZXh0KSB7Ci0gICAgICAgIERlbGV0ZU9iamVjdChoYm1wKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQorICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IEdESU9iamVjdDxIQklUTUFQPigpOwogCiAgICAgKnRhcmdldFJlZiA9IGJpdG1hcENvbnRleHQ7
CiAgICAgcmV0dXJuIGhibXA7CkBAIC03OCwzMCArNzYsMzEgQEAgc3RhdGljIENHQ29udGV4dFJl
ZiBjcmVhdGVDZ0NvbnRleHRGcm9tQgogICAgIHJldHVybiBiaXRtYXBDb250ZXh0OwogfQogCi1E
cmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9hdFNpemUg
c2NhbGUpCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlUmVm
LCBGbG9hdFNpemUgc2NhbGUpCiB7CiAgICAgLy8gRklYTUU6IGR1ZSB0byB0aGUgd2F5IGRyYWcg
aW1hZ2VzIGFyZSBkb25lIG9uIHdpbmRvd3Mgd2UgbmVlZCAKICAgICAvLyB0byBwcmVwcm9jZXNz
IHRoZSBhbHBoYSBjaGFubmVsIDxyZGFyOi8vcHJvYmxlbS81MDE1OTQ2PgotCi0gICAgaWYgKCFp
bWFnZSkKKyAgICBpZiAoIWltYWdlUmVmKQogICAgICAgICByZXR1cm4gMDsKLSAgICBDR0NvbnRl
eHRSZWYgdGFyZ2V0Q29udGV4dDsKLSAgICBDR0NvbnRleHRSZWYgc3JjQ29udGV4dDsKLSAgICBD
R0ltYWdlUmVmIHNyY0ltYWdlOwotICAgIEludFNpemUgc3JjU2l6ZSA9IGRyYWdJbWFnZVNpemUo
aW1hZ2UpOworCisgICAgR0RJT2JqZWN0PEhCSVRNQVA+IGhibXA7CisgICAgYXV0byBpbWFnZSA9
IGFkb3B0R0RJT2JqZWN0KGltYWdlUmVmKTsKKworICAgIEludFNpemUgc3JjU2l6ZSA9IGRyYWdJ
bWFnZVNpemUoaW1hZ2UuZ2V0KCkpOwogICAgIEludFNpemUgZHN0U2l6ZShzdGF0aWNfY2FzdDxp
bnQ+KHNyY1NpemUud2lkdGgoKSAqIHNjYWxlLndpZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHNy
Y1NpemUuaGVpZ2h0KCkgKiBzY2FsZS5oZWlnaHQoKSkpOwotICAgIEhCSVRNQVAgaGJtcCA9IDA7
CisKICAgICBIV25kREMgZGMoMCk7CiAgICAgYXV0byBkc3REQyA9IGFkb3B0R0RJT2JqZWN0KDo6
Q3JlYXRlQ29tcGF0aWJsZURDKGRjKSk7CiAgICAgaWYgKCFkc3REQykKICAgICAgICAgZ290byBl
eGl0OwogCisgICAgQ0dDb250ZXh0UmVmIHRhcmdldENvbnRleHQ7CiAgICAgaGJtcCA9IGFsbG9j
SW1hZ2UoZHN0REMuZ2V0KCksIGRzdFNpemUsICZ0YXJnZXRDb250ZXh0KTsKICAgICBpZiAoIWhi
bXApCiAgICAgICAgIGdvdG8gZXhpdDsKIAotICAgIHNyY0NvbnRleHQgPSBjcmVhdGVDZ0NvbnRl
eHRGcm9tQml0bWFwKGltYWdlKTsKLSAgICBzcmNJbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0
ZUltYWdlKHNyY0NvbnRleHQpOworICAgIENHQ29udGV4dFJlZiBzcmNDb250ZXh0ID0gY3JlYXRl
Q2dDb250ZXh0RnJvbUJpdG1hcChpbWFnZS5nZXQoKSk7CisgICAgQ0dJbWFnZVJlZiBzcmNJbWFn
ZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKHNyY0NvbnRleHQpOwogICAgIENHUmVjdCBy
ZWN0OwogICAgIHJlY3Qub3JpZ2luLnggPSAwOwogICAgIHJlY3Qub3JpZ2luLnkgPSAwOwpAQCAt
MTEwLDM0ICsxMDksMjUgQEAgRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJl
ZgogICAgIENHSW1hZ2VSZWxlYXNlKHNyY0ltYWdlKTsKICAgICBDR0NvbnRleHRSZWxlYXNlKHNy
Y0NvbnRleHQpOwogICAgIENHQ29udGV4dFJlbGVhc2UodGFyZ2V0Q29udGV4dCk7Ci0gICAgOjpE
ZWxldGVPYmplY3QoaW1hZ2UpOwotICAgIGltYWdlID0gMDsKIAogZXhpdDoKICAgICBpZiAoIWhi
bXApCi0gICAgICAgIGhibXAgPSBpbWFnZTsKLSAgICByZXR1cm4gaGJtcDsKKyAgICAgICAgaGJt
cC5zd2FwKGltYWdlKTsKKyAgICByZXR1cm4gaGJtcC5sZWFrKCk7CiB9CiAgICAgCiBEcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWcsIEltYWdlT3JpZW50YXRp
b25EZXNjcmlwdGlvbikKIHsKLSAgICBIQklUTUFQIGhibXAgPSAwOwogICAgIEhXbmREQyBkYygw
KTsKICAgICBhdXRvIHdvcmtpbmdEQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJs
ZURDKGRjKSk7Ci0gICAgQ0dDb250ZXh0UmVmIGRyYXdDb250ZXh0ID0gMDsKICAgICBpZiAoIXdv
cmtpbmdEQykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBoYm1wID0gYWxsb2NJbWFnZSh3b3Jr
aW5nREMuZ2V0KCksIGltZy0+c2l6ZSgpLCAmZHJhd0NvbnRleHQpOwotCi0gICAgaWYgKCFoYm1w
KQorICAgIENHQ29udGV4dFJlZiBkcmF3Q29udGV4dCA9IDA7CisgICAgYXV0byBoYm1wID0gYWxs
b2NJbWFnZSh3b3JraW5nREMuZ2V0KCksIGltZy0+c2l6ZSgpLCAmZHJhd0NvbnRleHQpOworICAg
IGlmICghaGJtcCB8fCAhZHJhd0NvbnRleHQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYg
KCFkcmF3Q29udGV4dCkgewotICAgICAgICA6OkRlbGV0ZU9iamVjdChoYm1wKTsKLSAgICAgICAg
aGJtcCA9IDA7Ci0gICAgfQotCiAgICAgQ0dJbWFnZVJlZiBzcmNJbWFnZSA9IGltZy0+Z2V0Q0dJ
bWFnZVJlZigpOwogICAgIENHUmVjdCByZWN0OwogICAgIHJlY3Quc2l6ZSA9IGltZy0+c2l6ZSgp
OwpAQCAtMTUzLDcgKzE0Myw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1h
Z2UoSW0KICAgICB9CiAgICAgQ0dDb250ZXh0UmVsZWFzZShkcmF3Q29udGV4dCk7CiAKLSAgICBy
ZXR1cm4gaGJtcDsKKyAgICByZXR1cm4gaGJtcC5sZWFrKCk7CiB9CiAgICAgCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fpcm9XaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDYWlyb1dpbi5jcHAJ
KHJldmlzaW9uIDE1NTU1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1h
Z2VDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEyICs0MywxMiBAQCB2b2lkIGRl
YWxsb2NDb250ZXh0KFBsYXRmb3JtQ29udGV4dENhaXJvCiAgICAgZGVsZXRlIHRhcmdldDsKIH0K
IAotSEJJVE1BUCBhbGxvY0ltYWdlKEhEQyBkYywgSW50U2l6ZSBzaXplLCBQbGF0Zm9ybUNvbnRl
eHRDYWlybyoqIHRhcmdldFJlZikKK0dESU9iamVjdDxIQklUTUFQPiBhbGxvY0ltYWdlKEhEQyBk
YywgSW50U2l6ZSBzaXplLCBQbGF0Zm9ybUNvbnRleHRDYWlybyoqIHRhcmdldFJlZikKIHsKICAg
ICBCaXRtYXBJbmZvIGJtcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoc2l6ZSk7CiAKICAgICBM
UFZPSUQgYml0czsKLSAgICBIQklUTUFQIGhibXAgPSBDcmVhdGVESUJTZWN0aW9uKGRjLCAmYm1w
SW5mbywgRElCX1JHQl9DT0xPUlMsICZiaXRzLCAwLCAwKTsKKyAgICBhdXRvIGhibXAgPSBhZG9w
dEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oZGMsICZibXBJbmZvLCBESUJfUkdCX0NPTE9S
UywgJmJpdHMsIDAsIDApKTsKIAogICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBDYWly
byBzdXJmYWNlIHRoYXQgcG9pbnRzIHRvIGEgV2luZG93cyBESUIuICBUaGUgRElCIGludGVycHJl
dHMKICAgICAvLyB3aXRoIHRoZSBvcHBvc2l0ZSBtZWFuaW5nIG9mIHBvc2l0aXZlIFkgYXhpcywg
c28gZXZlcnl0aGluZyB3ZSBkcmF3IGludG8gdGhpcyBjYWlybwpAQCAtNjIsMTAgKzYyLDggQEAg
SEJJVE1BUCBhbGxvY0ltYWdlKEhEQyBkYywgSW50U2l6ZSBzaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibXBJbmZvLmJtaUhlYWRlci5iaUhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm1wSW5m
by5ibWlIZWFkZXIuYmlXaWR0aCAqIDQpOwogCi0gICAgaWYgKCFiaXRtYXBDb250ZXh0KSB7Ci0g
ICAgICAgIERlbGV0ZU9iamVjdChoYm1wKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAg
IGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIEdESU9iamVjdDxIQklUTUFQPigp
OwogCiAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUoYml0bWFwQ29udGV4dCk7CiAgICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KGJpdG1hcENvbnRleHQpOwpAQCAtMTAyLDIwICsxMDAsMjEg
QEAgc3RhdGljIGNhaXJvX3N1cmZhY2VfdCogY3JlYXRlQ2Fpcm9Db250ZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJtV2lkdGhCeXRlcyk7CiB9
CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0
U2l6ZSBzY2FsZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1h
Z2VSZWYsIEZsb2F0U2l6ZSBzY2FsZSkKIHsKICAgICAvLyBGSVhNRTogZHVlIHRvIHRoZSB3YXkg
ZHJhZyBpbWFnZXMgYXJlIGRvbmUgb24gd2luZG93cyB3ZSBuZWVkIAogICAgIC8vIHRvIHByZXBy
b2Nlc3MgdGhlIGFscGhhIGNoYW5uZWwgPHJkYXI6Ly9wcm9ibGVtLzUwMTU5NDY+Ci0gICAgaWYg
KCFpbWFnZSkKKyAgICBpZiAoIWltYWdlUmVmKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIElu
dFNpemUgc3JjU2l6ZSA9IGRyYWdJbWFnZVNpemUoaW1hZ2UpOworICAgIEdESU9iamVjdDxIQklU
TUFQPiBoYm1wOworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdEdESU9iamVjdChpbWFnZVJlZik7CisK
KyAgICBJbnRTaXplIHNyY1NpemUgPSBkcmFnSW1hZ2VTaXplKGltYWdlLmdldCgpKTsKICAgICBJ
bnRTaXplIGRzdFNpemUoc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLndpZHRoKCkgKiBzY2FsZS53
aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLmhlaWdodCgpICogc2NhbGUuaGVpZ2h0
KCkpKTsKIAotICAgIEhCSVRNQVAgaGJtcCA9IDA7Ci0gICAgSERDIGRjID0gR2V0REMoMCk7Cisg
ICAgSFduZERDIGRjKDApOwogICAgIGF1dG8gZHN0REMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZUNvbXBhdGlibGVEQyhkYykpOwotCiAgICAgaWYgKCFkc3REQykKICAgICAgICAgZ290byBleGl0
OwogCkBAIC0xMjQsNyArMTIzLDcgQEAgRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJ
bWFnZVJlZgogICAgIGlmICghaGJtcCkKICAgICAgICAgZ290byBleGl0OwogCi0gICAgY2Fpcm9f
c3VyZmFjZV90KiBzcmNJbWFnZSA9IGNyZWF0ZUNhaXJvQ29udGV4dEZyb21CaXRtYXAoaW1hZ2Up
OworICAgIGNhaXJvX3N1cmZhY2VfdCogc3JjSW1hZ2UgPSBjcmVhdGVDYWlyb0NvbnRleHRGcm9t
Qml0bWFwKGltYWdlLmdldCgpKTsKIAogICAgIC8vIFNjYWxlIHRoZSB0YXJnZXQgc3VyZmFjZSB0
byB0aGUgbmV3IGltYWdlIHNpemUsIGFuZCBmbGlwIGl0CiAgICAgLy8gc28gdGhhdCB3aGVuIHdl
IHNldCB0aGUgc3JjSW1hZ2UgYXMgdGhlIHN1cmZhY2UgaXQgd2lsbCBkcmF3CkBAIC0xMzksNTIg
KzEzOCwzOSBAQCBEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmCiAKICAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3JjSW1hZ2UpOwogICAgIGRlYWxsb2NDb250ZXh0KHRh
cmdldENvbnRleHQpOwotICAgIDo6RGVsZXRlT2JqZWN0KGltYWdlKTsKLSAgICBpbWFnZSA9IDA7
CiAKIGV4aXQ6CiAgICAgaWYgKCFoYm1wKQotICAgICAgICBoYm1wID0gaW1hZ2U7Ci0gICAgUmVs
ZWFzZURDKDAsIGRjKTsKLSAgICByZXR1cm4gaGJtcDsKKyAgICAgICAgaGJtcC5zd2FwKGltYWdl
KTsKKyAgICByZXR1cm4gaGJtcC5sZWFrKCk7CiB9CiAgICAgCiBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWcsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlv
bikKIHsKLSAgICBIQklUTUFQIGhibXAgPSAwOwotICAgIEhEQyBkYyA9IEdldERDKDApOworICAg
IEhXbmREQyBkYygwKTsKICAgICBhdXRvIHdvcmtpbmdEQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3Jl
YXRlQ29tcGF0aWJsZURDKGRjKSk7CiAgICAgaWYgKCF3b3JraW5nREMpCi0gICAgICAgIGdvdG8g
ZXhpdDsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyogZHJh
d0NvbnRleHQgPSAwOwotICAgIGhibXAgPSBhbGxvY0ltYWdlKHdvcmtpbmdEQy5nZXQoKSwgaW1n
LT5zaXplKCksICZkcmF3Q29udGV4dCk7Ci0gICAgaWYgKCFoYm1wKQotICAgICAgICBnb3RvIGV4
aXQ7Ci0KLSAgICBpZiAoIWRyYXdDb250ZXh0KSB7Ci0gICAgICAgIDo6RGVsZXRlT2JqZWN0KGhi
bXApOwotICAgICAgICBoYm1wID0gMDsKLSAgICB9CisgICAgYXV0byBoYm1wID0gYWxsb2NJbWFn
ZSh3b3JraW5nREMuZ2V0KCksIGltZy0+c2l6ZSgpLCAmZHJhd0NvbnRleHQpOworICAgIGlmICgh
aGJtcCB8fCAhZHJhd0NvbnRleHQpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgeyAvLyBUaGlz
IGJsb2NrIGlzIHJlcXVpcmVkIGR1ZSB0byB0aGUgbXN2YyBjb21waWxlciBlcnJvciBDMjM2Mi4K
LSAgICAgICAgY2Fpcm9fdCogY3IgPSBkcmF3Q29udGV4dC0+Y3IoKTsKLSAgICAgICAgY2Fpcm9f
c2V0X3NvdXJjZV9yZ2IoY3IsIDEuMCwgMC4wLCAxLjApOwotICAgICAgICBjYWlyb19maWxsX3By
ZXNlcnZlKGNyKTsKLQotICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0g
aW1nLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgICAgICBpZiAoc3VyZmFjZSkg
ewotICAgICAgICAgICAgLy8gRHJhdyB0aGUgaW1hZ2UuCi0gICAgICAgICAgICBjYWlyb19zZXRf
c291cmNlX3N1cmZhY2UoY3IsIHN1cmZhY2UuZ2V0KCksIDAuMCwgMC4wKTsKLSAgICAgICAgICAg
IGNhaXJvX3BhaW50KGNyKTsKLSAgICAgICAgfQorICAgIGNhaXJvX3QqIGNyID0gZHJhd0NvbnRl
eHQtPmNyKCk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDEuMCwgMC4wLCAxLjApOwor
ICAgIGNhaXJvX2ZpbGxfcHJlc2VydmUoY3IpOworCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gc3VyZmFjZSA9IGltZy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAo
c3VyZmFjZSkgeworICAgICAgICAvLyBEcmF3IHRoZSBpbWFnZS4KKyAgICAgICAgY2Fpcm9fc2V0
X3NvdXJjZV9zdXJmYWNlKGNyLCBzdXJmYWNlLmdldCgpLCAwLjAsIDAuMCk7CisgICAgICAgIGNh
aXJvX3BhaW50KGNyKTsKICAgICB9CiAKICAgICBkZWFsbG9jQ29udGV4dChkcmF3Q29udGV4dCk7
CiAKLWV4aXQ6Ci0gICAgUmVsZWFzZURDKDAsIGRjKTsKLSAgICByZXR1cm4gaGJtcDsKKyAgICBy
ZXR1cm4gaGJtcC5sZWFrKCk7CiB9CiAgICAgCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAkocmV2aXNpb24gMTU1NTUxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1IQklUTUFQIGFsbG9jSW1h
Z2UoSERDLCBJbnRTaXplLCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCoqIHRhcmdldFJlZik7CitH
RElPYmplY3Q8SEJJVE1BUD4gYWxsb2NJbWFnZShIREMsIEludFNpemUsIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiogdGFyZ2V0UmVmKTsKIHZvaWQgZGVhbGxvY0NvbnRleHQoUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIHRhcmdldCk7CiAKIEludFNpemUgZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VS
ZWYgaW1hZ2UpCkBAIC0xNzgsMTggKzE3OCwxNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0lt
YWdlRm9yTGluayhLVVJMCiAKICAgICAvLyBXZSBub3cga25vdyBob3cgYmlnIHRoZSBpbWFnZSBu
ZWVkcyB0byBiZSwgc28gd2UgY3JlYXRlIGFuZAogICAgIC8vIGZpbGwgdGhlIGJhY2tncm91bmQK
LSAgICBIQklUTUFQIGltYWdlID0gMDsKICAgICBIV25kREMgZGMoMCk7CiAgICAgYXV0byB3b3Jr
aW5nREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhkYykpOwogICAgIGlm
ICghd29ya2luZ0RDKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0UmVmOwotICAgIGltYWdlID0gYWxsb2NJbWFnZSh3b3JraW5nREMuZ2V0
KCksIGltYWdlU2l6ZSwgJmNvbnRleHRSZWYpOworICAgIGF1dG8gaW1hZ2UgPSBhbGxvY0ltYWdl
KHdvcmtpbmdEQy5nZXQoKSwgaW1hZ2VTaXplLCAmY29udGV4dFJlZik7CiAgICAgaWYgKCFpbWFn
ZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAgIDo6U2VsZWN0T2JqZWN0KHdvcmtp
bmdEQy5nZXQoKSwgaW1hZ2UpOworICAgIDo6U2VsZWN0T2JqZWN0KHdvcmtpbmdEQy5nZXQoKSwg
aW1hZ2UuZ2V0KCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGNvbnRleHRSZWYpOwog
ICAgIC8vIE9uIE1hYyBhbHBoYSBpcyB7MC43LCAwLjcsIDAuNywgMC44fSwgaG93ZXZlciB3ZSBj
YW4ndCBjb250cm9sIGFscGhhCiAgICAgLy8gZm9yIGRyYWcgaW1hZ2VzIG9uIHdpbiwgc28gd2Ug
dXNlIDEKQEAgLTIxNSw3ICsyMTQsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9y
TGluayhLVVJMCiAgICAgV2ViQ29yZURyYXdEb3VibGVkVGV4dEF0UG9pbnQoY29udGV4dCwgbGFi
ZWwsIHRleHRQb3MsICpsYWJlbEZvbnQsIHRvcENvbG9yLCBib3R0b21Db2xvcik7CiAKICAgICBk
ZWFsbG9jQ29udGV4dChjb250ZXh0UmVmKTsKLSAgICByZXR1cm4gaW1hZ2U7CisgICAgcmV0dXJu
IGltYWdlLmxlYWsoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDE1NTU1MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCAr
MTA3LDYgQEAgUG9wdXBNZW51V2luOjpQb3B1cE1lbnVXaW4oUG9wdXBNZW51Q2xpZQogICAgIDog
bV9wb3B1cENsaWVudChjbGllbnQpCiAgICAgLCBtX3Njcm9sbGJhcigwKQogICAgICwgbV9wb3B1
cCgwKQotICAgICwgbV9EQygwKQotICAgICwgbV9ibXAoMCkKICAgICAsIG1fd2FzQ2xpY2tlZChm
YWxzZSkKICAgICAsIG1faXRlbUhlaWdodCgwKQogICAgICwgbV9zY3JvbGxPZmZzZXQoMCkKQEAg
LTEyMSwxMCArMTE5LDYgQEAgUG9wdXBNZW51V2luOjpQb3B1cE1lbnVXaW4oUG9wdXBNZW51Q2xp
ZQogCiBQb3B1cE1lbnVXaW46On5Qb3B1cE1lbnVXaW4oKQogewotICAgIGlmIChtX2JtcCkKLSAg
ICAgICAgOjpEZWxldGVPYmplY3QobV9ibXApOwotICAgIGlmIChtX0RDKQotICAgICAgICA6OkRl
bGV0ZURDKG1fREMpOwogICAgIGlmIChtX3BvcHVwKQogICAgICAgICA6OkRlc3Ryb3lXaW5kb3co
bV9wb3B1cCk7CiAgICAgaWYgKG1fc2Nyb2xsYmFyKQpAQCAtNTg5LDcgKzU4Myw3IEBAIHZvaWQg
UG9wdXBNZW51V2luOjpwYWludChjb25zdCBJbnRSZWN0JgogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoIW1fREMpIHsKLSAgICAgICAgbV9EQyA9IDo6Q3JlYXRlQ29tcGF0aWJsZURDKEhXbmRE
QyhtX3BvcHVwKSk7CisgICAgICAgIG1fREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBh
dGlibGVEQyhIV25kREMobV9wb3B1cCkpKTsKICAgICAgICAgaWYgKCFtX0RDKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTU5NywxMyArNTkxLDExIEBAIHZvaWQgUG9wdXBNZW51V2lu
OjpwYWludChjb25zdCBJbnRSZWN0JgogICAgIGlmIChtX2JtcCkgewogICAgICAgICBib29sIGtl
ZXBCaXRtYXAgPSBmYWxzZTsKICAgICAgICAgQklUTUFQIGJpdG1hcDsKLSAgICAgICAgaWYgKEdl
dE9iamVjdChtX2JtcCwgc2l6ZW9mKGJpdG1hcCksICZiaXRtYXApKQorICAgICAgICBpZiAoOjpH
ZXRPYmplY3QobV9ibXAuZ2V0KCksIHNpemVvZihiaXRtYXApLCAmYml0bWFwKSkKICAgICAgICAg
ICAgIGtlZXBCaXRtYXAgPSBiaXRtYXAuYm1XaWR0aCA9PSBjbGllbnRSZWN0KCkud2lkdGgoKQog
ICAgICAgICAgICAgICAgICYmIGJpdG1hcC5ibUhlaWdodCA9PSBjbGllbnRSZWN0KCkuaGVpZ2h0
KCk7Ci0gICAgICAgIGlmICgha2VlcEJpdG1hcCkgewotICAgICAgICAgICAgRGVsZXRlT2JqZWN0
KG1fYm1wKTsKLSAgICAgICAgICAgIG1fYm1wID0gMDsKLSAgICAgICAgfQorICAgICAgICBpZiAo
IWtlZXBCaXRtYXApCisgICAgICAgICAgICBtX2JtcC5jbGVhcigpOwogICAgIH0KICAgICBpZiAo
IW1fYm1wKSB7CiAjaWYgT1MoV0lOQ0UpCkBAIC02MTIsMTQgKzYwNCwxNCBAQCB2b2lkIFBvcHVw
TWVudVdpbjo6cGFpbnQoY29uc3QgSW50UmVjdCYKICAgICAgICAgQml0bWFwSW5mbyBiaXRtYXBJ
bmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoY2xpZW50UmVjdCgpLnNpemUoKSk7CiAj
ZW5kaWYKICAgICAgICAgdm9pZCogcGl4ZWxzID0gMDsKLSAgICAgICAgbV9ibXAgPSA6OkNyZWF0
ZURJQlNlY3Rpb24obV9EQywgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAw
LCAwKTsKKyAgICAgICAgbV9ibXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24o
bV9EQy5nZXQoKSwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKSk7
CiAgICAgICAgIGlmICghbV9ibXApCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgOjpT
ZWxlY3RPYmplY3QobV9EQywgbV9ibXApOworICAgICAgICA6OlNlbGVjdE9iamVjdChtX0RDLmdl
dCgpLCBtX2JtcC5nZXQoKSk7CiAgICAgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQo
bV9EQyk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQobV9EQy5nZXQoKSk7CiAKICAgICBp
bnQgaXRlbUNvdW50ID0gY2xpZW50KCktPmxpc3RTaXplKCk7CiAKQEAgLTY4NCw3ICs2NzYsNyBA
QCB2b2lkIFBvcHVwTWVudVdpbjo6cGFpbnQoY29uc3QgSW50UmVjdCYKICAgICBIV25kREMgaFdu
ZERDOwogICAgIEhEQyBsb2NhbERDID0gaGRjID8gaGRjIDogaFduZERDLnNldEhXbmQobV9wb3B1
cCk7CiAKLSAgICA6OkJpdEJsdChsb2NhbERDLCBkYW1hZ2VSZWN0LngoKSwgZGFtYWdlUmVjdC55
KCksIGRhbWFnZVJlY3Qud2lkdGgoKSwgZGFtYWdlUmVjdC5oZWlnaHQoKSwgbV9EQywgZGFtYWdl
UmVjdC54KCksIGRhbWFnZVJlY3QueSgpLCBTUkNDT1BZKTsKKyAgICA6OkJpdEJsdChsb2NhbERD
LCBkYW1hZ2VSZWN0LngoKSwgZGFtYWdlUmVjdC55KCksIGRhbWFnZVJlY3Qud2lkdGgoKSwgZGFt
YWdlUmVjdC5oZWlnaHQoKSwgbV9EQy5nZXQoKSwgZGFtYWdlUmVjdC54KCksIGRhbWFnZVJlY3Qu
eSgpLCBTUkNDT1BZKTsKIH0KIAogaW50IFBvcHVwTWVudVdpbjo6c2Nyb2xsU2l6ZShTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgJKHJldmlzaW9uIDE1NTU1MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTIw
LDggKzEyMCw4IEBAIHByaXZhdGU6CiAgICAgUG9wdXBNZW51Q2xpZW50KiBtX3BvcHVwQ2xpZW50
OwogICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOwogICAgIEhXTkQgbV9wb3B1cDsK
LSAgICBIREMgbV9EQzsKLSAgICBIQklUTUFQIG1fYm1wOworICAgIEdESU9iamVjdDxIREM+IG1f
REM7CisgICAgR0RJT2JqZWN0PEhCSVRNQVA+IG1fYm1wOwogICAgIGJvb2wgbV93YXNDbGlja2Vk
OwogICAgIEludFJlY3QgbV93aW5kb3dSZWN0OwogICAgIGludCBtX2l0ZW1IZWlnaHQ7Cg==
</data>
<flag name="review"
          id="233431"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>