<?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>59096</bug_id>
          
          <creation_ts>2011-04-21 06:16:37 -0700</creation_ts>
          <short_desc>Split GlyphPage from GlyphPageTreeNode.h into its own header</short_desc>
          <delta_ts>2011-04-21 06:57:52 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>59085</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>389973</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 06:16:37 -0700</bug_when>
    <thetext>Split GlyphPage from GlyphPageTreeNode.h into its own header</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389976</commentid>
    <comment_count>1</comment_count>
      <attachid>90522</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 06:20:05 -0700</bug_when>
    <thetext>Created attachment 90522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389980</commentid>
    <comment_count>2</comment_count>
      <attachid>90522</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-04-21 06:32:42 -0700</bug_when>
    <thetext>Comment on attachment 90522
Patch

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

r=me

&gt; Source/WebCore/platform/graphics/GlyphPage.h:77
&gt; +    static const size_t size = 256; // Covers Latin-1 in a single page.

Can you move this to the top of the file and give it a more meaningful name? Not sure if you have to add a g or k for static consts.

&gt; Source/WebCore/platform/graphics/GlyphPage.h:141
&gt; +    // Separate arrays, rather than array of GlyphData, to save space.

Not sure what you mean here. Can you rephrase it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389981</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 06:33:54 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 90522 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90522&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GlyphPage.h:77
&gt; &gt; +    static const size_t size = 256; // Covers Latin-1 in a single page.
&gt; 
&gt; Can you move this to the top of the file and give it a more meaningful name? Not sure if you have to add a g or k for static consts.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GlyphPage.h:141
&gt; &gt; +    // Separate arrays, rather than array of GlyphData, to save space.
&gt; 
&gt; Not sure what you mean here. Can you rephrase it

As discussed on IRC, that requires to change dozens of files, the intent of this patch is only to refactor, not to change any code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389998</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 06:57:52 -0700</bug_when>
    <thetext>Landed in r84490.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90522</attachid>
            <date>2011-04-21 06:20:05 -0700</date>
            <delta_ts>2011-04-21 06:32:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>GlyphPage-h-patch.diff</filename>
            <type>text/plain</type>
            <size>24035</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NDg5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDQtMjEgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgR2x5cGhQYWdlIGZyb20gR2x5cGhQYWdl
VHJlZU5vZGUuaCBpbnRvIGl0cyBvd24gaGVhZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA5NgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbTogQWRkIEdseXBoUGFnZS5oIHRvIGJ1aWxkLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTog
RGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmg6IENvcGllZCBmcm9tIHBsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmguIFJlbW92ZWQgR2x5cGhQYWdlVHJlZU5vZGUg
Y2xhc3MsIGxlYXZpbmcgb25seSBHbHlwaFBhZ2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhQYWdlVHJlZU5vZGUuaDogUmVtb3ZlZCBHbHlwaFBhZ2UgY2xhc3MuCisKIDIwMTEt
MDQtMjEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCShyZXZpc2lvbiA4NDQ4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI0MjcsNiArMjQyNyw3IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGguaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmggXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiA4NDQ4OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5
KQpAQCAtODIyLDYgKzgyMiw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGguaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gODQ0ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcwNjksNiArMjcw
NjksMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdseXBoUGFnZS5oIgorCQkJCQk+CisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR2x5
cGhQYWdlVHJlZU5vZGUuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
ODQ0ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsNyBAQAogCQkwODcyODE1NjBGMjZCOUI2
MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDg3MjgxNTIwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkVsZW1l
bnQuaCAqLzsgfTsKIAkJMDg3MjgxNTcwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkdyb3VwRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODcyODE1MzBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uR3JvdXBFbGVtZW50LmNwcCAqLzsgfTsK
IAkJMDg3MjgxNTgwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkdyb3VwRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3MjgxNTQwRjI2QjlC
NjAwQUZDNTk2IC8qIE9wdGlvbkdyb3VwRWxlbWVudC5oICovOyB9OworCQkwODczQjg2QjEzNjA2
NEVBMDBBNTIyQzIgLyogR2x5cGhQYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODczQjg2QTEzNjA2NEVBMDBBNTIyQzIgLyogR2x5cGhQYWdlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDg3NDRC
QUEwRURCN0Q4NjAwNEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzQ0QkE5MEVEQjdEODYwMDRDOUU2
MyAvKiBXTUxPbkV2ZW50RWxlbWVudC5jcHAgKi87IH07CiAJCTA4NzQ0QkFFMEVEQjdEOTIwMDRD
OUU2MyAvKiBXTUxPbkV2ZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDg3NDRCQUQwRURCN0Q5MjAwNEM5RTYzIC8qIFdNTE9uRXZlbnRF
bGVtZW50LmggKi87IH07CiAJCTA4N0I4NDk2MTI3MkNFQzgwMEExNDQxNyAvKiBTVkdBbmltYXRl
ZEFuZ2xlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODdCODQ5NTEyNzJDRUM3MDBBMTQ0MTcgLyogU1ZHQW5pbWF0ZWRBbmdsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02NTcwLDYgKzY1NzEsNyBA
QAogCQkwODcyODE1MjBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA4NzI4MTUzMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25Hcm91cEVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9uR3Jv
dXBFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3MjgxNTQwRjI2
QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkdyb3VwRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBPcHRpb25Hcm91cEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMDg3M0I4NkExMzYwNjRFQTAwQTUyMkMyIC8qIEdseXBoUGFnZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbHlwaFBhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDg3NDRCQTkwRURCN0Q4NjAwNEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTE9uRXZlbnRFbGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3NDRCQUQwRURCN0Q5MjAw
NEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdNTE9uRXZlbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA4N0I4NDk1MTI3MkNFQzcwMEExNDQxNyAvKiBTVkdBbmltYXRlZEFuZ2xlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkQW5nbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE3ODg0LDYgKzE3ODg2LDcgQEAKIAkJCQkwODZCQkQwRTEzNjAz
OUMyMDA4QjE1RDggLyogR2x5cGguaCAqLywKIAkJCQlCMkMzREE1QjBEMDA2Q0Q2MDBFRjZGMjYg
LyogR2x5cGhCdWZmZXIuaCAqLywKIAkJCQlDNUQ0QUE3ODExNkJBRkI2MDA2OUNBOTMgLyogR2x5
cGhNZXRyaWNzTWFwLmggKi8sCisJCQkJMDg3M0I4NkExMzYwNjRFQTAwQTUyMkMyIC8qIEdseXBo
UGFnZS5oICovLAogCQkJCUIyQzNEQTVDMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaFBhZ2VUcmVl
Tm9kZS5jcHAgKi8sCiAJCQkJQjJDM0RBNUQwRDAwNkNENjAwRUY2RjI2IC8qIEdseXBoUGFnZVRy
ZWVOb2RlLmggKi8sCiAJCQkJQkM1M0M2MDcwREE1NkM1NzAwMjFFQjVEIC8qIEdyYWRpZW50LmNw
cCAqLywKQEAgLTIzMDA3LDYgKzIzMDEwLDcgQEAKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5
NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUwRjEyRjBG
QzlDMDBDMTMzNzkgLyogWFNTRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODZCQkQwRjEz
NjAzOUMyMDA4QjE1RDggLyogR2x5cGguaCBpbiBIZWFkZXJzICovLAorCQkJCTA4NzNCODZCMTM2
MDY0RUEwMEE1MjJDMiAvKiBHbHlwaFBhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgJKHJldmlzaW9uIDg0NDg5
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9k
ZS5oOjg0NDg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgR2x5cGhQYWdlVHJlZU5vZGVfaAorI2RlZmluZSBHbHlwaFBhZ2VUcmVlTm9kZV9oCisKKyNp
bmNsdWRlICJHbHlwaC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKworI2lmbmRlZiBOREVC
VUcKK3ZvaWQgc2hvd0dseXBoUGFnZVRyZWVzKCk7Cit2b2lkIHNob3dHbHlwaFBhZ2VUcmVlKHVu
c2lnbmVkIHBhZ2VOdW1iZXIpOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRm9udERhdGE7CitjbGFzcyBHbHlwaFBhZ2VUcmVlTm9kZTsKK2NsYXNzIFNpbXBsZUZvbnRE
YXRhOworCisvLyBIb2xkcyB0aGUgZ2x5cGggaW5kZXggYW5kIHRoZSBjb3JyZXNwb25kaW5nIFNp
bXBsZUZvbnREYXRhIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuCisvLyBjaGFyYWN0ZXIuCitzdHJ1
Y3QgR2x5cGhEYXRhIHsKKyAgICBHbHlwaERhdGEoR2x5cGggZyA9IDAsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmID0gMCkKKyAgICAgICAgOiBnbHlwaChnKQorICAgICAgICAsIGZvbnREYXRhKGYp
CisgICAgeworICAgIH0KKyAgICBHbHlwaCBnbHlwaDsKKyAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGE7Cit9OworCisvLyBBIEdseXBoUGFnZSBjb250YWlucyBhIGZpeGVkLXNpemUg
c2V0IG9mIEdseXBoRGF0YSBtYXBwaW5ncyBmb3IgYSBjb250aWd1b3VzCisvLyByYW5nZSBvZiBj
aGFyYWN0ZXJzIGluIHRoZSBVbmljb2RlIGNvZGUgc3BhY2UuIEdseXBoUGFnZXMgYXJlIGluZGV4
ZWQKKy8vIHN0YXJ0aW5nIGZyb20gMCBhbmQgaW5jcmVtZW50aW5nIGZvciBlYWNoIDI1NiBnbHlw
aHMuCisvLworLy8gT25lIHBhZ2UgbWF5IGFjdHVhbGx5IGluY2x1ZGUgZ2x5cGhzIGZyb20gb3Ro
ZXIgZm9udHMgaWYgdGhlIGNoYXJhY3RlcnMgYXJlCisvLyBtaXNzaW5nIGluIHRoZSBwcmltYXJ5
IGZvbnQuIEl0IGlzIG93bmVkIGJ5IGV4YWN0bHkgb25lIEdseXBoUGFnZVRyZWVOb2RlLAorLy8g
YWx0aG91Z2ggbXVsdGlwbGUgbm9kZXMgbWF5IHJlZmVyZW5jZSBpdCBhcyB0aGVpciAicGFnZSIg
aWYgdGhleSBhcmUgc3VwcG9zZWQKKy8vIHRvIGJlIG92ZXJyaWRpbmcgdGhlIHBhcmVudCdzIG5v
ZGUsIGJ1dCBwcm92aWRlIG5vIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCitjbGFzcyBHbHlwaFBh
Z2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZShHbHlwaFBhZ2VUcmVlTm9kZSogb3duZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdseXBoUGFnZShvd25lcikpOworICAg
IH0KKworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gQ292ZXJzIExhdGlu
LTEgaW4gYSBzaW5nbGUgcGFnZS4KKworICAgIHVuc2lnbmVkIGluZGV4Rm9yQ2hhcmFjdGVyKFVD
aGFyMzIgYykgY29uc3QgeyByZXR1cm4gYyAlIHNpemU7IH0KKyAgICBHbHlwaERhdGEgZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gaW5kZXhGb3JDaGFyYWN0ZXIoYyk7CisgICAgICAgIHJldHVybiBHbHlwaERhdGEo
bV9nbHlwaHNbaW5kZXhdLCBtX2dseXBoRm9udERhdGFbaW5kZXhdKTsKKyAgICB9CisKKyAgICBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaW5kZXggPCBzaXplKTsKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YSht
X2dseXBoc1tpbmRleF0sIG1fZ2x5cGhGb250RGF0YVtpbmRleF0pOworICAgIH0KKworICAgIEds
eXBoIGdseXBoQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aW5kZXggPCBzaXplKTsKKyAgICAgICAgcmV0dXJuIG1fZ2x5cGhzW2luZGV4XTsKKyAgICB9CisK
KyAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZ2x5cGhGb250RGF0YVtpbmRleEZvckNo
YXJhY3RlcihjKV07CisgICAgfQorCisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBTaW1wbGVGb250RGF0YSogZikKKyAgICB7CisgICAg
ICAgIHNldEdseXBoRGF0YUZvckluZGV4KGluZGV4Rm9yQ2hhcmFjdGVyKGMpLCBnLCBmKTsKKyAg
ICB9CisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgR2x5cGgg
ZywgY29uc3QgU2ltcGxlRm9udERhdGEqIGYpCisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXgg
PCBzaXplKTsKKyAgICAgICAgbV9nbHlwaHNbaW5kZXhdID0gZzsKKyAgICAgICAgbV9nbHlwaEZv
bnREYXRhW2luZGV4XSA9IGY7CisgICAgfQorICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgo
dW5zaWduZWQgaW5kZXgsIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhKQorICAgIHsKKyAgICAg
ICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRh
LmZvbnREYXRhKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb3B5RnJvbShjb25zdCBHbHlwaFBh
Z2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgbWVtY3B5KG1fZ2x5cGhzLCBvdGhlci5tX2dseXBo
cywgc2l6ZW9mKG1fZ2x5cGhzKSk7CisgICAgICAgIG1lbWNweShtX2dseXBoRm9udERhdGEsIG90
aGVyLm1fZ2x5cGhGb250RGF0YSwgc2l6ZW9mKG1fZ2x5cGhGb250RGF0YSkpOworICAgIH0KKwor
ICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbWVtc2V0KG1fZ2x5cGhzLCAwLCBzaXpl
b2YobV9nbHlwaHMpKTsKKyAgICAgICAgbWVtc2V0KG1fZ2x5cGhGb250RGF0YSwgMCwgc2l6ZW9m
KG1fZ2x5cGhGb250RGF0YSkpOworICAgIH0KKyAgICAKKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSog
b3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9CisKKyAgICAvLyBJbXBsZW1lbnRlZCBi
eSB0aGUgcGxhdGZvcm0uCisgICAgYm9vbCBmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoLCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKik7CisKK3ByaXZhdGU6CisgICAgR2x5cGhQYWdlKEdseXBoUGFn
ZVRyZWVOb2RlKiBvd25lcikKKyAgICAgICAgOiBtX293bmVyKG93bmVyKQorICAgIHsKKyAgICB9
CisKKyAgICAvLyBTZXBhcmF0ZSBhcnJheXMsIHJhdGhlciB0aGFuIGFycmF5IG9mIEdseXBoRGF0
YSwgdG8gc2F2ZSBzcGFjZS4KKyAgICBHbHlwaCBtX2dseXBoc1tzaXplXTsKKyAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogbV9nbHlwaEZvbnREYXRhW3NpemVdOworCisgICAgR2x5cGhQYWdlVHJl
ZU5vZGUqIG1fb3duZXI7Cit9OworCisvLyBUaGUgZ2x5cGggcGFnZSB0cmVlIGlzIGEgZGF0YSBz
dHJ1Y3R1cmUgdGhhdCBtYXBzIChGb250RGF0YSwgZ2x5cGggcGFnZSBudW1iZXIpCisvLyB0byBh
IEdseXBoUGFnZS4gIExldmVsIDAgKHRoZSAicm9vdCIpIGlzIHNwZWNpYWwuIFRoZXJlIGlzIG9u
ZSByb290CisvLyBHbHlwaFBhZ2VUcmVlTm9kZSBmb3IgZWFjaCBnbHlwaCBwYWdlIG51bWJlci4g
IFRoZSByb290cyBkbyBub3QgaGF2ZSBhCisvLyBHbHlwaFBhZ2UgYXNzb2NpYXRlZCB3aXRoIHRo
ZW0sIGFuZCB0aGVpciBpbml0aWFsaXplUGFnZSgpIGZ1bmN0aW9uIGlzIG5ldmVyCisvLyBjYWxs
ZWQgdG8gZmlsbCB0aGUgZ2x5cGhzLgorLy8KKy8vIEVhY2ggcm9vdCBub2RlIG1hcHMgYSBGb250
RGF0YSBwb2ludGVyIHRvIGFub3RoZXIgR2x5cGhQYWdlVHJlZU5vZGUgYXQKKy8vIGxldmVsIDEg
KHRoZSAicm9vdCBjaGlsZCIpIHRoYXQgc3RvcmVzIHRoZSBhY3R1YWwgZ2x5cGhzIGZvciBhIHNw
ZWNpZmljIGZvbnQgZGF0YS4KKy8vIFRoZXNlIG5vZGVzIHdpbGwgb25seSBoYXZlIGEgR2x5cGhQ
YWdlIGlmIHRoZXkgaGF2ZSBnbHlwaHMgZm9yIHRoYXQgcmFuZ2UuCisvLworLy8gTGV2ZWxzIGdy
ZWF0ZXIgdGhhbiBvbmUgY29ycmVzcG9uZCB0byBzdWJzZXF1ZW50IGxldmVscyBvZiB0aGUgZmFs
bGJhY2sgbGlzdAorLy8gZm9yIHRoYXQgZm9udC4gVGhlc2UgbGV2ZWxzIG92ZXJyaWRlIHRoZWly
IHBhcmVudCdzIHBhZ2Ugb2YgZ2x5cGhzIGJ5CisvLyBmaWxsaW5nIGluIGhvbGVzIHdpdGggdGhl
IG5ldyBmb250ICh0aHVzIG1ha2luZyBhIG1vcmUgY29tcGxldGUgcGFnZSkuCisvLworLy8gQSBO
VUxMIEZvbnREYXRhIHBvaW50ZXIgY29ycmVzcG9uZHMgdG8gdGhlIHN5c3RlbSBmYWxsYmFjawor
Ly8gZm9udC4gSXQgaXMgdHJhY2tlZCBzZXBhcmF0ZWx5IGZyb20gdGhlIHJlZ3VsYXIgcGFnZXMg
YW5kIG92ZXJyaWRlcyBzbyB0aGF0CisvLyB0aGUgZ2x5cGggcGFnZXMgZG8gbm90IGdldCBwb2xs
dXRlZCB3aXRoIHRoZXNlIGxhc3QtcmVzb3J0IGdseXBocy4gVGhlCisvLyBzeXN0ZW0gZmFsbGJh
Y2sgcGFnZSBpcyBub3QgcG9wdWxhdGVkIGF0IGNvbnN0cnVjdGlvbiBsaWtlIHRoZSBvdGhlciBw
YWdlcywKKy8vIGJ1dCBvbiBkZW1hbmQgZm9yIGVhY2ggZ2x5cGgsIGJlY2F1c2UgdGhlIHN5c3Rl
bSBtYXkgbmVlZCB0byB1c2UgZGlmZmVyZW50CisvLyBmYWxsYmFjayBmb250cyBmb3IgZWFjaC4g
VGhpcyBsYXp5IHBvcHVsYXRpb24gaXMgZG9uZSBieSB0aGUgRm9udC4KK2NsYXNzIEdseXBoUGFn
ZVRyZWVOb2RlIHsKK3B1YmxpYzoKKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSgpCisgICAgICAgIDog
bV9wYXJlbnQoMCkKKyAgICAgICAgLCBtX2xldmVsKDApCisgICAgICAgICwgbV9pc1N5c3RlbUZh
bGxiYWNrKGZhbHNlKQorICAgICAgICAsIG1fY3VzdG9tRm9udENvdW50KDApCisgICAgICAgICwg
bV9zeXN0ZW1GYWxsYmFja0NoaWxkKDApCisjaWZuZGVmIE5ERUJVRworICAgICAgICAsIG1fcGFn
ZU51bWJlcigwKQorI2VuZGlmCisgICAgeworICAgIH0KKworICAgIH5HbHlwaFBhZ2VUcmVlTm9k
ZSgpOworCisgICAgc3RhdGljIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+KiByb290
czsKKyAgICBzdGF0aWMgR2x5cGhQYWdlVHJlZU5vZGUqIHBhZ2VaZXJvUm9vdDsKKworICAgIHN0
YXRpYyBHbHlwaFBhZ2VUcmVlTm9kZSogZ2V0Um9vdENoaWxkKGNvbnN0IEZvbnREYXRhKiBmb250
RGF0YSwgdW5zaWduZWQgcGFnZU51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRSb290
KHBhZ2VOdW1iZXIpLT5nZXRDaGlsZChmb250RGF0YSwgcGFnZU51bWJlcik7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgcHJ1bmVUcmVlQ3VzdG9tRm9udERhdGEoY29uc3QgRm9udERhdGEqKTsK
KyAgICBzdGF0aWMgdm9pZCBwcnVuZVRyZWVGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSop
OworCisgICAgdm9pZCBwcnVuZUN1c3RvbUZvbnREYXRhKGNvbnN0IEZvbnREYXRhKik7CisgICAg
dm9pZCBwcnVuZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQgbGV2ZWwg
PSAwKTsKKworICAgIEdseXBoUGFnZVRyZWVOb2RlKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBt
X3BhcmVudDsgfQorICAgIEdseXBoUGFnZVRyZWVOb2RlKiBnZXRDaGlsZChjb25zdCBGb250RGF0
YSosIHVuc2lnbmVkIHBhZ2VOdW1iZXIpOworCisgICAgLy8gUmV0dXJucyBhIHBhZ2Ugb2YgZ2x5
cGhzIChvciBOVUxMIGlmIHRoZXJlIGFyZSBubyBnbHlwaHMgaW4gdGhpcyBwYWdlJ3MgY2hhcmFj
dGVyIHJhbmdlKS4KKyAgICBHbHlwaFBhZ2UqIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2Uu
Z2V0KCk7IH0KKworICAgIC8vIFJldHVybnMgdGhlIGxldmVsIG9mIHRoaXMgbm9kZS4gU2VlIGNs
YXNzLWxldmVsIGNvbW1lbnQuCisgICAgdW5zaWduZWQgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBt
X2xldmVsOyB9CisKKyAgICAvLyBUaGUgc3lzdGVtIGZhbGxiYWNrIGZvbnQgaGFzIHNwZWNpYWwg
cnVsZXMgKHNlZSBhYm92ZSkuCisgICAgYm9vbCBpc1N5c3RlbUZhbGxiYWNrKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1N5c3RlbUZhbGxiYWNrOyB9CisKKyAgICBzdGF0aWMgc2l6ZV90IHRyZWVHbHlw
aFBhZ2VDb3VudCgpOworICAgIHNpemVfdCBwYWdlQ291bnQoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBzdGF0aWMgR2x5cGhQYWdlVHJlZU5vZGUqIGdldFJvb3QodW5zaWduZWQgcGFnZU51bWJl
cik7CisgICAgdm9pZCBpbml0aWFsaXplUGFnZShjb25zdCBGb250RGF0YSosIHVuc2lnbmVkIHBh
Z2VOdW1iZXIpOworCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgc2hvd1N1YnRyZWUoKTsKKyNl
bmRpZgorCisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG1fcGFyZW50OworICAgIFJlZlB0cjxHbHlw
aFBhZ2U+IG1fcGFnZTsKKyAgICB1bnNpZ25lZCBtX2xldmVsIDogMzE7CisgICAgYm9vbCBtX2lz
U3lzdGVtRmFsbGJhY2sgOiAxOworICAgIHVuc2lnbmVkIG1fY3VzdG9tRm9udENvdW50OworICAg
IEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBHbHlwaFBhZ2VUcmVlTm9kZSo+IG1fY2hpbGRyZW47
CisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG1fc3lzdGVtRmFsbGJhY2tDaGlsZDsKKworI2lmbmRl
ZiBOREVCVUcKKyAgICB1bnNpZ25lZCBtX3BhZ2VOdW1iZXI7CisKKyAgICBmcmllbmQgdm9pZCA6
OnNob3dHbHlwaFBhZ2VUcmVlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpOworI2VuZGlmCit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHbHlwaFBhZ2VUcmVlTm9kZV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAkocmV2
aXNpb24gODQ0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBh
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwyNiArMjcsMTgg
QEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBHbHlwaFBhZ2VUcmVlTm9kZV9oCi0jZGVm
aW5lIEdseXBoUGFnZVRyZWVOb2RlX2gKKyNpZm5kZWYgR2x5cGhQYWdlX2gKKyNkZWZpbmUgR2x5
cGhQYWdlX2gKIAogI2luY2x1ZGUgIkdseXBoLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgog
Ci0jaWZuZGVmIE5ERUJVRwotdm9pZCBzaG93R2x5cGhQYWdlVHJlZXMoKTsKLXZvaWQgc2hvd0ds
eXBoUGFnZVRyZWUodW5zaWduZWQgcGFnZU51bWJlcik7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGb250RGF0YTsKLWNsYXNzIEdseXBoUGFnZVRyZWVOb2RlOwogY2xh
c3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBHbHlwaFBhZ2VUcmVlTm9kZTsKIAogLy8gSG9sZHMg
dGhlIGdseXBoIGluZGV4IGFuZCB0aGUgY29ycmVzcG9uZGluZyBTaW1wbGVGb250RGF0YSBpbmZv
cm1hdGlvbiBmb3IgYSBnaXZlbgogLy8gY2hhcmFjdGVyLgpAQCAtMTA0LDEyICs5NywxNCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpbmRleEZvckNoYXJh
Y3RlcihjKSwgZywgZik7CiAgICAgfQorCiAgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1
bnNpZ25lZCBpbmRleCwgR2x5cGggZywgY29uc3QgU2ltcGxlRm9udERhdGEqIGYpCiAgICAgewog
ICAgICAgICBBU1NFUlQoaW5kZXggPCBzaXplKTsKICAgICAgICAgbV9nbHlwaHNbaW5kZXhdID0g
ZzsKICAgICAgICAgbV9nbHlwaEZvbnREYXRhW2luZGV4XSA9IGY7CiAgICAgfQorCiAgICAgdm9p
ZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgY29uc3QgR2x5cGhEYXRhJiBn
bHlwaERhdGEpCiAgICAgewogICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpbmRleCwgZ2x5
cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udERhdGEpOwpAQCAtMTQ1LDk0ICsxNDAsNiBAQCBw
cml2YXRlOgogICAgIEdseXBoUGFnZVRyZWVOb2RlKiBtX293bmVyOwogfTsKIAotLy8gVGhlIGds
eXBoIHBhZ2UgdHJlZSBpcyBhIGRhdGEgc3RydWN0dXJlIHRoYXQgbWFwcyAoRm9udERhdGEsIGds
eXBoIHBhZ2UgbnVtYmVyKQotLy8gdG8gYSBHbHlwaFBhZ2UuICBMZXZlbCAwICh0aGUgInJvb3Qi
KSBpcyBzcGVjaWFsLiBUaGVyZSBpcyBvbmUgcm9vdAotLy8gR2x5cGhQYWdlVHJlZU5vZGUgZm9y
IGVhY2ggZ2x5cGggcGFnZSBudW1iZXIuICBUaGUgcm9vdHMgZG8gbm90IGhhdmUgYQotLy8gR2x5
cGhQYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGVtLCBhbmQgdGhlaXIgaW5pdGlhbGl6ZVBhZ2UoKSBm
dW5jdGlvbiBpcyBuZXZlcgotLy8gY2FsbGVkIHRvIGZpbGwgdGhlIGdseXBocy4KLS8vCi0vLyBF
YWNoIHJvb3Qgbm9kZSBtYXBzIGEgRm9udERhdGEgcG9pbnRlciB0byBhbm90aGVyIEdseXBoUGFn
ZVRyZWVOb2RlIGF0Ci0vLyBsZXZlbCAxICh0aGUgInJvb3QgY2hpbGQiKSB0aGF0IHN0b3JlcyB0
aGUgYWN0dWFsIGdseXBocyBmb3IgYSBzcGVjaWZpYyBmb250IGRhdGEuCi0vLyBUaGVzZSBub2Rl
cyB3aWxsIG9ubHkgaGF2ZSBhIEdseXBoUGFnZSBpZiB0aGV5IGhhdmUgZ2x5cGhzIGZvciB0aGF0
IHJhbmdlLgotLy8KLS8vIExldmVscyBncmVhdGVyIHRoYW4gb25lIGNvcnJlc3BvbmQgdG8gc3Vi
c2VxdWVudCBsZXZlbHMgb2YgdGhlIGZhbGxiYWNrIGxpc3QKLS8vIGZvciB0aGF0IGZvbnQuIFRo
ZXNlIGxldmVscyBvdmVycmlkZSB0aGVpciBwYXJlbnQncyBwYWdlIG9mIGdseXBocyBieQotLy8g
ZmlsbGluZyBpbiBob2xlcyB3aXRoIHRoZSBuZXcgZm9udCAodGh1cyBtYWtpbmcgYSBtb3JlIGNv
bXBsZXRlIHBhZ2UpLgotLy8KLS8vIEEgTlVMTCBGb250RGF0YSBwb2ludGVyIGNvcnJlc3BvbmRz
IHRvIHRoZSBzeXN0ZW0gZmFsbGJhY2sKLS8vIGZvbnQuIEl0IGlzIHRyYWNrZWQgc2VwYXJhdGVs
eSBmcm9tIHRoZSByZWd1bGFyIHBhZ2VzIGFuZCBvdmVycmlkZXMgc28gdGhhdAotLy8gdGhlIGds
eXBoIHBhZ2VzIGRvIG5vdCBnZXQgcG9sbHV0ZWQgd2l0aCB0aGVzZSBsYXN0LXJlc29ydCBnbHlw
aHMuIFRoZQotLy8gc3lzdGVtIGZhbGxiYWNrIHBhZ2UgaXMgbm90IHBvcHVsYXRlZCBhdCBjb25z
dHJ1Y3Rpb24gbGlrZSB0aGUgb3RoZXIgcGFnZXMsCi0vLyBidXQgb24gZGVtYW5kIGZvciBlYWNo
IGdseXBoLCBiZWNhdXNlIHRoZSBzeXN0ZW0gbWF5IG5lZWQgdG8gdXNlIGRpZmZlcmVudAotLy8g
ZmFsbGJhY2sgZm9udHMgZm9yIGVhY2guIFRoaXMgbGF6eSBwb3B1bGF0aW9uIGlzIGRvbmUgYnkg
dGhlIEZvbnQuCi1jbGFzcyBHbHlwaFBhZ2VUcmVlTm9kZSB7Ci1wdWJsaWM6Ci0gICAgR2x5cGhQ
YWdlVHJlZU5vZGUoKQotICAgICAgICA6IG1fcGFyZW50KDApCi0gICAgICAgICwgbV9sZXZlbCgw
KQotICAgICAgICAsIG1faXNTeXN0ZW1GYWxsYmFjayhmYWxzZSkKLSAgICAgICAgLCBtX2N1c3Rv
bUZvbnRDb3VudCgwKQotICAgICAgICAsIG1fc3lzdGVtRmFsbGJhY2tDaGlsZCgwKQotI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgLCBtX3BhZ2VOdW1iZXIoMCkKLSNlbmRpZgotICAgIHsKLSAgICB9
Ci0KLSAgICB+R2x5cGhQYWdlVHJlZU5vZGUoKTsKLQotICAgIHN0YXRpYyBIYXNoTWFwPGludCwg
R2x5cGhQYWdlVHJlZU5vZGUqPiogcm9vdHM7Ci0gICAgc3RhdGljIEdseXBoUGFnZVRyZWVOb2Rl
KiBwYWdlWmVyb1Jvb3Q7Ci0KLSAgICBzdGF0aWMgR2x5cGhQYWdlVHJlZU5vZGUqIGdldFJvb3RD
aGlsZChjb25zdCBGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIHBhZ2VOdW1iZXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gZ2V0Um9vdChwYWdlTnVtYmVyKS0+Z2V0Q2hpbGQoZm9udERhdGEs
IHBhZ2VOdW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHBydW5lVHJlZUN1c3RvbUZv
bnREYXRhKGNvbnN0IEZvbnREYXRhKik7Ci0gICAgc3RhdGljIHZvaWQgcHJ1bmVUcmVlRm9udERh
dGEoY29uc3QgU2ltcGxlRm9udERhdGEqKTsKLQotICAgIHZvaWQgcHJ1bmVDdXN0b21Gb250RGF0
YShjb25zdCBGb250RGF0YSopOwotICAgIHZvaWQgcHJ1bmVGb250RGF0YShjb25zdCBTaW1wbGVG
b250RGF0YSosIHVuc2lnbmVkIGxldmVsID0gMCk7Ci0KLSAgICBHbHlwaFBhZ2VUcmVlTm9kZSog
cGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KLSAgICBHbHlwaFBhZ2VUcmVlTm9k
ZSogZ2V0Q2hpbGQoY29uc3QgRm9udERhdGEqLCB1bnNpZ25lZCBwYWdlTnVtYmVyKTsKLQotICAg
IC8vIFJldHVybnMgYSBwYWdlIG9mIGdseXBocyAob3IgTlVMTCBpZiB0aGVyZSBhcmUgbm8gZ2x5
cGhzIGluIHRoaXMgcGFnZSdzIGNoYXJhY3RlciByYW5nZSkuCi0gICAgR2x5cGhQYWdlKiBwYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlLmdldCgpOyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBs
ZXZlbCBvZiB0aGlzIG5vZGUuIFNlZSBjbGFzcy1sZXZlbCBjb21tZW50LgotICAgIHVuc2lnbmVk
IGxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9sZXZlbDsgfQotCi0gICAgLy8gVGhlIHN5c3RlbSBm
YWxsYmFjayBmb250IGhhcyBzcGVjaWFsIHJ1bGVzIChzZWUgYWJvdmUpLgotICAgIGJvb2wgaXNT
eXN0ZW1GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNTeXN0ZW1GYWxsYmFjazsgfQotCi0g
ICAgc3RhdGljIHNpemVfdCB0cmVlR2x5cGhQYWdlQ291bnQoKTsKLSAgICBzaXplX3QgcGFnZUNv
dW50KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIEdseXBoUGFnZVRyZWVOb2RlKiBn
ZXRSb290KHVuc2lnbmVkIHBhZ2VOdW1iZXIpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVBhZ2UoY29u
c3QgRm9udERhdGEqLCB1bnNpZ25lZCBwYWdlTnVtYmVyKTsKLQotI2lmbmRlZiBOREVCVUcKLSAg
ICB2b2lkIHNob3dTdWJ0cmVlKCk7Ci0jZW5kaWYKLQotICAgIEdseXBoUGFnZVRyZWVOb2RlKiBt
X3BhcmVudDsKLSAgICBSZWZQdHI8R2x5cGhQYWdlPiBtX3BhZ2U7Ci0gICAgdW5zaWduZWQgbV9s
ZXZlbCA6IDMxOwotICAgIGJvb2wgbV9pc1N5c3RlbUZhbGxiYWNrIDogMTsKLSAgICB1bnNpZ25l
ZCBtX2N1c3RvbUZvbnRDb3VudDsKLSAgICBIYXNoTWFwPGNvbnN0IEZvbnREYXRhKiwgR2x5cGhQ
YWdlVHJlZU5vZGUqPiBtX2NoaWxkcmVuOwotICAgIEdseXBoUGFnZVRyZWVOb2RlKiBtX3N5c3Rl
bUZhbGxiYWNrQ2hpbGQ7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdW5zaWduZWQgbV9wYWdlTnVt
YmVyOwotCi0gICAgZnJpZW5kIHZvaWQgOjpzaG93R2x5cGhQYWdlVHJlZSh1bnNpZ25lZCBwYWdl
TnVtYmVyKTsKLSNlbmRpZgotfTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gR2x5cGhQYWdlVHJlZU5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5oCShyZXZpc2lvbiA4NDQ4OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYgR2x5cGhQYWdlVHJlZU5vZGVf
aAogI2RlZmluZSBHbHlwaFBhZ2VUcmVlTm9kZV9oCiAKLSNpbmNsdWRlICJHbHlwaC5oIgorI2lu
Y2x1ZGUgIkdseXBoUGFnZS5oIgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQ0LDEwNyArNDQsOCBA
QCB2b2lkIHNob3dHbHlwaFBhZ2VUcmVlKHVuc2lnbmVkIHBhZ2VOdW1iCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZvbnREYXRhOwotY2xhc3MgR2x5cGhQYWdlVHJlZU5vZGU7CiBjbGFz
cyBTaW1wbGVGb250RGF0YTsKIAotLy8gSG9sZHMgdGhlIGdseXBoIGluZGV4IGFuZCB0aGUgY29y
cmVzcG9uZGluZyBTaW1wbGVGb250RGF0YSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbgotLy8gY2hh
cmFjdGVyLgotc3RydWN0IEdseXBoRGF0YSB7Ci0gICAgR2x5cGhEYXRhKEdseXBoIGcgPSAwLCBj
b25zdCBTaW1wbGVGb250RGF0YSogZiA9IDApCi0gICAgICAgIDogZ2x5cGgoZykKLSAgICAgICAg
LCBmb250RGF0YShmKQotICAgIHsKLSAgICB9Ci0gICAgR2x5cGggZ2x5cGg7Ci0gICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhOwotfTsKLQotLy8gQSBHbHlwaFBhZ2UgY29udGFpbnMg
YSBmaXhlZC1zaXplIHNldCBvZiBHbHlwaERhdGEgbWFwcGluZ3MgZm9yIGEgY29udGlndW91cwot
Ly8gcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiB0aGUgVW5pY29kZSBjb2RlIHNwYWNlLiBHbHlwaFBh
Z2VzIGFyZSBpbmRleGVkCi0vLyBzdGFydGluZyBmcm9tIDAgYW5kIGluY3JlbWVudGluZyBmb3Ig
ZWFjaCAyNTYgZ2x5cGhzLgotLy8KLS8vIE9uZSBwYWdlIG1heSBhY3R1YWxseSBpbmNsdWRlIGds
eXBocyBmcm9tIG90aGVyIGZvbnRzIGlmIHRoZSBjaGFyYWN0ZXJzIGFyZQotLy8gbWlzc2luZyBp
biB0aGUgcHJpbWFyeSBmb250LiBJdCBpcyBvd25lZCBieSBleGFjdGx5IG9uZSBHbHlwaFBhZ2VU
cmVlTm9kZSwKLS8vIGFsdGhvdWdoIG11bHRpcGxlIG5vZGVzIG1heSByZWZlcmVuY2UgaXQgYXMg
dGhlaXIgInBhZ2UiIGlmIHRoZXkgYXJlIHN1cHBvc2VkCi0vLyB0byBiZSBvdmVycmlkaW5nIHRo
ZSBwYXJlbnQncyBub2RlLCBidXQgcHJvdmlkZSBubyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgot
Y2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGUoR2x5cGhQYWdlVHJlZU5v
ZGUqIG93bmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBhZ2Uo
b3duZXIpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAyNTY7IC8v
IENvdmVycyBMYXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCi0KLSAgICB1bnNpZ25lZCBpbmRleEZv
ckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0IHsgcmV0dXJuIGMgJSBzaXplOyB9Ci0gICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0Ci0gICAgewotICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yQ2hhcmFjdGVyKGMpOwotICAgICAgICByZXR1
cm4gR2x5cGhEYXRhKG1fZ2x5cGhzW2luZGV4XSwgbV9nbHlwaEZvbnREYXRhW2luZGV4XSk7Ci0g
ICAgfQotCi0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4KSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgc2l6ZSk7Ci0gICAgICAgIHJldHVy
biBHbHlwaERhdGEobV9nbHlwaHNbaW5kZXhdLCBtX2dseXBoRm9udERhdGFbaW5kZXhdKTsKLSAg
ICB9Ci0KLSAgICBHbHlwaCBnbHlwaEF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGluZGV4IDwgc2l6ZSk7Ci0gICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRl
eF07Ci0gICAgfQotCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIgYykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2dseXBoRm9udERh
dGFbaW5kZXhGb3JDaGFyYWN0ZXIoYyldOwotICAgIH0KLQotICAgIHZvaWQgc2V0R2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgR2x5cGggZywgY29uc3QgU2ltcGxlRm9udERhdGEqIGYp
Ci0gICAgewotICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpbmRleEZvckNoYXJhY3Rlcihj
KSwgZywgZik7Ci0gICAgfQotICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQg
aW5kZXgsIEdseXBoIGcsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGluZGV4IDwgc2l6ZSk7Ci0gICAgICAgIG1fZ2x5cGhzW2luZGV4XSA9IGc7Ci0gICAg
ICAgIG1fZ2x5cGhGb250RGF0YVtpbmRleF0gPSBmOwotICAgIH0KLSAgICB2b2lkIHNldEdseXBo
RGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBjb25zdCBHbHlwaERhdGEmIGdseXBoRGF0YSkK
LSAgICB7Ci0gICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGluZGV4LCBnbHlwaERhdGEuZ2x5
cGgsIGdseXBoRGF0YS5mb250RGF0YSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29weUZyb20o
Y29uc3QgR2x5cGhQYWdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIG1lbWNweShtX2dseXBocywg
b3RoZXIubV9nbHlwaHMsIHNpemVvZihtX2dseXBocykpOwotICAgICAgICBtZW1jcHkobV9nbHlw
aEZvbnREYXRhLCBvdGhlci5tX2dseXBoRm9udERhdGEsIHNpemVvZihtX2dseXBoRm9udERhdGEp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1lbXNldChtX2ds
eXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7Ci0gICAgICAgIG1lbXNldChtX2dseXBoRm9udERh
dGEsIDAsIHNpemVvZihtX2dseXBoRm9udERhdGEpKTsKLSAgICB9Ci0gICAgCi0gICAgR2x5cGhQ
YWdlVHJlZU5vZGUqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQotCi0gICAgLy8g
SW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgotICAgIGJvb2wgZmlsbCh1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSopOwotCi1wcml2YXRlOgotICAgIEdseXBo
UGFnZShHbHlwaFBhZ2VUcmVlTm9kZSogb3duZXIpCi0gICAgICAgIDogbV9vd25lcihvd25lcikK
LSAgICB7Ci0gICAgfQotCi0gICAgLy8gU2VwYXJhdGUgYXJyYXlzLCByYXRoZXIgdGhhbiBhcnJh
eSBvZiBHbHlwaERhdGEsIHRvIHNhdmUgc3BhY2UuCi0gICAgR2x5cGggbV9nbHlwaHNbc2l6ZV07
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZ2x5cGhGb250RGF0YVtzaXplXTsKLQotICAg
IEdseXBoUGFnZVRyZWVOb2RlKiBtX293bmVyOwotfTsKLQogLy8gVGhlIGdseXBoIHBhZ2UgdHJl
ZSBpcyBhIGRhdGEgc3RydWN0dXJlIHRoYXQgbWFwcyAoRm9udERhdGEsIGdseXBoIHBhZ2UgbnVt
YmVyKQogLy8gdG8gYSBHbHlwaFBhZ2UuICBMZXZlbCAwICh0aGUgInJvb3QiKSBpcyBzcGVjaWFs
LiBUaGVyZSBpcyBvbmUgcm9vdAogLy8gR2x5cGhQYWdlVHJlZU5vZGUgZm9yIGVhY2ggZ2x5cGgg
cGFnZSBudW1iZXIuICBUaGUgcm9vdHMgZG8gbm90IGhhdmUgYQo=
</data>
<flag name="review"
          id="83287"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>