From dave.flamangoes@gmail.com  Sun Jun  7 17:49:49 2020
Received: (at submit) by bugs.x2go.org; 7 Jun 2020 15:50:12 +0000
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
	ymir.das-netzwerkteam.de
X-Spam-Level: 
X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00,HTML_MESSAGE,
	RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham
	autolearn_force=no version=3.4.2
Received: from mail-io1-f47.google.com (mail-io1-f47.google.com [209.85.166.47])
	by ymir.das-netzwerkteam.de (Postfix) with ESMTPS id 01E925DAD6
	for <submit@bugs.x2go.org>; Sun,  7 Jun 2020 17:49:35 +0200 (CEST)
Received: by mail-io1-f47.google.com with SMTP id r2so15936992ioo.4
        for <submit@bugs.x2go.org>; Sun, 07 Jun 2020 08:49:35 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:from:date:message-id:subject:to;
        bh=ZMel9S6wzUy5POCC0cAMbg5065jWLOdu/7Zo3sVUXNM=;
        b=TlmQ/ua2dVmDqYQQcaUqSTqb2qPsQxC2brTJJR1InTDECUvkD7cNJ31cAXIZnhGcTN
         8/irdKy14XlNrTscja3LljqetBlHKdu+j9OfO9RnqcRLs+TAsO7aoyDTVQRx0ViCDHyM
         BGLwQgVntqe3UZGvQv/Io17dV+ZhBk710v/GnK4B5RRAKsd5whZpPYlfoRhU+v+S1QQg
         Sp7NbeyzajJlJ7LozA+wsJIXjGJdwm8zxz7udepe3g3XC8leSFTlvN5RJSbzNqZHCBVL
         qUQPSXSudZquR0YWB72o8qKnYBpWVTYZOdKzmCgf4zkJbOnwNeDt5/bUALf3OI2vpFne
         6oaw==
X-Gm-Message-State: AOAM532C6i1Qc1SVglCWkCH7/YtEfnHSwxi6aZVBGBRwWiHoRZuJ9j81
	+YpbXv3ssJpdDL3dQGTmkYC5JND3t9zg9ChqfnliSg==
X-Google-Smtp-Source: ABdhPJyr4KNCKpOLjOAeeqptKCV0BEzrPRp+wNWuF5pmKYxjZqq7nXbjWOotGDDmorT3SbsnMVjMJ8oaFMFl1zUwCvk=
X-Received: by 2002:a5e:a70c:: with SMTP id b12mr17067141iod.96.1591544973425;
 Sun, 07 Jun 2020 08:49:33 -0700 (PDT)
MIME-Version: 1.0
From: Dave Chamberlin-Kidd <dave@flamangoes.co.uk>
Date: Sun, 7 Jun 2020 16:49:21 +0100
Message-ID: <CAL4gekBJSL8f_uv8pHNNrsHiWvy_31YCvi+tzG4XzJ76n6Gc6A@mail.gmail.com>
Subject: x2goclient interface code needs refactoring to make it more
 accessible and make improvements easier to implement and test
To: submit@bugs.x2go.org
Content-Type: multipart/mixed; boundary="000000000000c9530205a780703c"

--000000000000c9530205a780703c
Content-Type: multipart/alternative; boundary="000000000000c9530005a780703a"

--000000000000c9530005a780703a
Content-Type: text/plain; charset="UTF-8"

Package: x2goclient
Version: 4.1.2.3
Severity: wishlist
Tag: patch

There are a number of minor issues, oddities and limitations with the
current x2goclient gui which would be good to fix, resolve and improve on.
Like all projects however the core team have more important issues to
resolve. The code in its current state is difficult to understand and amend
and as it has no tests it is risky for developers to make functional
changes unless they spend a lot of time getting to know the code and doing
extensive manual testing.

Attached are 10 small refactorings which start extracting out some of the
code into smaller functions. As the code is separated out it becomes easier
to understand and change.

There are no functional changes in these patches, nor do they attempt or
claim to fix any known issues. On their own the benefit of these patches is
limited however the hope is that over time I will be able to submit more
refactorings as I learn more and then start fixing issues and improving the
UI. Extracting out functions is just one of many techniques that can be
used to make code cleaner but in my experience it's a good one to start
with. It should also be noted that sometimes code is extracted "as is" even
when it is clear further refactoring can be done to improve things, this is
by design in order to keep risk and size of patches to a minimum.

Cheers
Dave

--000000000000c9530005a780703a
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Package: x2goclient<div>Version: 4.1.2.3</div><div>Severit=
y: wishlist</div><div>Tag: patch</div><div><br></div><div>There are a numbe=
r of minor issues, oddities and limitations with the current x2goclient gui=
 which would be good to fix, resolve and improve on. Like all projects howe=
ver the core team have more important issues to resolve. The code in its cu=
rrent state is difficult to understand and amend and as it has no tests it =
is risky for developers to make functional changes unless they spend a lot =
of time getting to know the code and doing extensive manual testing.</div><=
div><br></div><div>Attached are 10 small refactorings which start extractin=
g out some of the code into smaller functions. As the code is separated out=
 it becomes easier to understand and change.</div><div><br></div><div>There=
 are no functional changes in these patches, nor do they attempt or claim t=
o fix any known issues. On their own the benefit of these patches is limite=
d however the hope is that over time I will be able to submit more refactor=
ings as I learn more and then start fixing issues and improving the UI. Ext=
racting out functions is just one of many techniques that can be used to ma=
ke code cleaner but in my experience it&#39;s a good one to start with. It =
should also be noted that sometimes code is extracted &quot;as is&quot; eve=
n when it is clear further refactoring can be done to improve things, this =
is by design in order to keep risk and size of patches to a minimum.=C2=A0<=
/div><div><br></div><div>Cheers</div><div>Dave</div><div>=C2=A0 =C2=A0=C2=
=A0</div></div>

--000000000000c9530005a780703a--
--000000000000c9530205a780703c
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0007-Refactor-Extract-geometry-setup.patch"
Content-Disposition: attachment; 
	filename="0007-Refactor-Extract-geometry-setup.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_kb58c30i36>
X-Attachment-Id: f_kb58c30i36

RnJvbSA1NDljMmI2ZmFkZGVkMTEwMzIzNjg1ODlmMTNiZTc2NmIxODdjNzA0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENoYW1iZXJsaW4tS2lkZCA8ZGF2ZUBmbGFtYW5nb2Vz
LmNvLnVrPgpEYXRlOiBTYXQsIDE2IE1heSAyMDIwIDIzOjQ3OjU4ICswMTAwClN1YmplY3Q6IFtQ
QVRDSCAwNy80M10gUmVmYWN0b3I6IEV4dHJhY3QgZ2VvbWV0cnkgc2V0dXAKCi0tLQogc3JjL3Nl
c3Npb25idXR0b24uY3BwIHwgMjUgKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogc3JjL3Nlc3Np
b25idXR0b24uaCAgIHwgIDEgKwogMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAx
NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAgYi9zcmMv
c2Vzc2lvbmJ1dHRvbi5jcHAKaW5kZXggNjA3MzQ2MC4uYjI1ZTY3NCAxMDA2NDQKLS0tIGEvc3Jj
L3Nlc3Npb25idXR0b24uY3BwCisrKyBiL3NyYy9zZXNzaW9uYnV0dG9uLmNwcApAQCAtODIsMTMg
KzgyLDggQEAgU2Vzc2lvbkJ1dHRvbjo6U2Vzc2lvbkJ1dHRvbiAoIE9OTWFpbldpbmRvdyogbXcs
UVdpZGdldCAqcGFyZW50LCBRU3RyaW5nIGlkICkKICAgICBzaWQ9aWQ7CiAKICAgICBzZXR1cENv
bW1hbmQoKTsKLQotICAgIGdlb21Cb3g9Y3JlYXRlR2VvbWV0cnlCb3goKTsKLSAgICBnZW9tPW5l
dyBRTGFiZWwgKCB0aGlzICk7Ci0gICAgZ2VvbS0+c2V0TW91c2VUcmFja2luZyAoIHRydWUgKTsK
LSAgICBnZW9tSWNvbj1uZXcgUUxhYmVsICggdGhpcyApOwotICAgIGdlb21JY29uLT5zZXRNb3Vz
ZVRyYWNraW5nICggdHJ1ZSApOwotCisgICAgc2V0dXBHZW9tZXRyeSgpOworIAogICAgIHNlc3NO
YW1lPW5ldyBRTGFiZWwgKCB0aGlzICk7CiAgICAgZm50PXNlc3NOYW1lLT5mb250KCk7CiAgICAg
Zm50LnNldEJvbGQgKCB0cnVlICk7CkBAIC0yNzcsMTUgKzI3MiwxNyBAQCB2b2lkIFNlc3Npb25C
dXR0b246OnNldHVwT3B0aW9uc1BhbGV0dGUoIFFQYWxldHRlICZjcGFsICkKICAgICBjcGFsLnNl
dENvbG9yICggUVBhbGV0dGU6OldpbmRvdyxiYWNrZ3JvdW5kQ29sb3IgKTsKIH0KIAotUUNvbWJv
Qm94KiBTZXNzaW9uQnV0dG9uOjpjcmVhdGVHZW9tZXRyeUJveCgpCit2b2lkIFNlc3Npb25CdXR0
b246OnNldHVwR2VvbWV0cnkoKQogewotICAgIFFDb21ib0JveCogZ2VvbUJveCA9IG5ldyBRQ29t
Ym9Cb3goIHRoaXMgKTsKLSAgICBnZW9tQm94LT5zZXRNb3VzZVRyYWNraW5nKCB0cnVlICk7Ci0g
ICAgZ2VvbUJveC0+c2V0RnJhbWUoIGZhbHNlICk7Ci0gICAgZ2VvbUJveC0+c2V0RWRpdGFibGUo
IGZhbHNlICk7CisgICAgZ2VvbUJveCA9IG5ldyBRQ29tYm9Cb3ggKCB0aGlzICk7CisgICAgZ2Vv
bUJveC0+c2V0TW91c2VUcmFja2luZyAoIHRydWUgKTsKKyAgICBnZW9tQm94LT5zZXRGcmFtZSAo
IGZhbHNlICk7CisgICAgZ2VvbUJveC0+c2V0RWRpdGFibGUgKCBmYWxzZSApOwogICAgIGdlb21C
b3gtPnVwZGF0ZSgpOwotCi0gICAgcmV0dXJuIGdlb21Cb3g7CisgICAgZ2VvbT1uZXcgUUxhYmVs
ICggdGhpcyApOworICAgIGdlb20tPnNldE1vdXNlVHJhY2tpbmcgKCB0cnVlICk7CisgICAgZ2Vv
bUljb249bmV3IFFMYWJlbCAoIHRoaXMgKTsKKyAgICBnZW9tSWNvbi0+c2V0TW91c2VUcmFja2lu
ZyAoIHRydWUgKTsKIH0KIAogdm9pZCBTZXNzaW9uQnV0dG9uOjpzZXR1cENvbW1hbmQoKXsKZGlm
ZiAtLWdpdCBhL3NyYy9zZXNzaW9uYnV0dG9uLmggYi9zcmMvc2Vzc2lvbmJ1dHRvbi5oCmluZGV4
IDZmY2E5MjEuLmQ2ODYzOWMgMTAwNjQ0Ci0tLSBhL3NyYy9zZXNzaW9uYnV0dG9uLmgKKysrIGIv
c3JjL3Nlc3Npb25idXR0b24uaApAQCAtOTIsNiArOTIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
c2V0dXBPcHRpb25zUGFsZXR0ZSAoIFFQYWxldHRlICZjcGFsICk7CiAgICAgdm9pZCBzZXR1cENv
bW1hbmQoKTsKICAgICBRQ29tYm9Cb3gqIGNyZWF0ZUdlb21ldHJ5Qm94KCk7CisgICAgdm9pZCBz
ZXR1cEdlb21ldHJ5KCk7CiAKIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBzbG90Q2xpY2tlZCgp
OwotLSAKMi4yNy4wCgo=
--000000000000c9530205a780703c
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0008-Refactor-Extract-sound-setup.patch"
Content-Disposition: attachment; 
	filename="0008-Refactor-Extract-sound-setup.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_kb58c30e35>
X-Attachment-Id: f_kb58c30e35

RnJvbSBjYjA2MTkwYjc5ZDNjZGJjZjdjNTc0YjM0NWQzZWQxM2EwYTgxMDg3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENoYW1iZXJsaW4tS2lkZCA8ZGF2ZUBmbGFtYW5nb2Vz
LmNvLnVrPgpEYXRlOiBTYXQsIDE2IE1heSAyMDIwIDIzOjU3OjM2ICswMTAwClN1YmplY3Q6IFtQ
QVRDSCAwOC80M10gUmVmYWN0b3I6IEV4dHJhY3Qgc291bmQgc2V0dXAKCi0tLQogc3JjL3Nlc3Np
b25idXR0b24uY3BwIHwgMTQgKysrKysrKysrLS0tLS0KIHNyYy9zZXNzaW9uYnV0dG9uLmggICB8
ICAyICsrCiAyIGZpbGVzIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0p
CgpkaWZmIC0tZ2l0IGEvc3JjL3Nlc3Npb25idXR0b24uY3BwIGIvc3JjL3Nlc3Npb25idXR0b24u
Y3BwCmluZGV4IGIyNWU2NzQuLmZmNTllMTIgMTAwNjQ0Ci0tLSBhL3NyYy9zZXNzaW9uYnV0dG9u
LmNwcAorKysgYi9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgU2Vzc2lv
bkJ1dHRvbjo6U2Vzc2lvbkJ1dHRvbiAoIE9OTWFpbldpbmRvdyogbXcsUVdpZGdldCAqcGFyZW50
LCBRU3RyaW5nIGlkICkKIAogICAgIHNldHVwQ29tbWFuZCgpOwogICAgIHNldHVwR2VvbWV0cnko
KTsKLSAKKwogICAgIHNlc3NOYW1lPW5ldyBRTGFiZWwgKCB0aGlzICk7CiAgICAgZm50PXNlc3NO
YW1lLT5mb250KCk7CiAgICAgZm50LnNldEJvbGQgKCB0cnVlICk7CkBAIC05NiwxMCArOTYsNyBA
QCBTZXNzaW9uQnV0dG9uOjpTZXNzaW9uQnV0dG9uICggT05NYWluV2luZG93KiBtdyxRV2lkZ2V0
ICpwYXJlbnQsIFFTdHJpbmcgaWQgKQogICAgIHNlcnZlcj1uZXcgUUxhYmVsICggdGhpcyApOwog
ICAgIHNlcnZlckljb249bmV3IFFMYWJlbCAoIHRoaXMgKTsKIAotICAgIHNvdW5kPW5ldyBRUHVz
aEJ1dHRvbiAoIHRoaXMgKTsKLSAgICBzb3VuZC0+c2V0RmxhdCAoIHRydWUgKTsKLSAgICBzb3Vu
ZC0+c2V0TW91c2VUcmFja2luZyAoIHRydWUgKTsKLSAgICBzb3VuZEljb249bmV3IFFMYWJlbCAo
IHRoaXMgKTsKKyAgICBzZXR1cFNvdW5kKCk7CiAKICAgICBRUGFsZXR0ZSBvcHRpb25zUGFsZXR0
ZSA9IGNtZEJveC0+cGFsZXR0ZSgpOyAKICAgICBzZXR1cE9wdGlvbnNQYWxldHRlICggb3B0aW9u
c1BhbGV0dGUgKTsKQEAgLTI5NSw2ICsyOTIsMTMgQEAgdm9pZCBTZXNzaW9uQnV0dG9uOjpzZXR1
cENvbW1hbmQoKXsKICAgICBjbWRCb3gtPnNldEZyYW1lICggZmFsc2UgKTsKIH0KIAordm9pZCBT
ZXNzaW9uQnV0dG9uOjpzZXR1cFNvdW5kKCl7CisgICAgc291bmQ9bmV3IFFQdXNoQnV0dG9uICgg
dGhpcyApOworICAgIHNvdW5kLT5zZXRGbGF0ICggdHJ1ZSApOworICAgIHNvdW5kLT5zZXRNb3Vz
ZVRyYWNraW5nICggdHJ1ZSApOworICAgIHNvdW5kSWNvbj1uZXcgUUxhYmVsICggdGhpcyApOwor
fQorCiB2b2lkIFNlc3Npb25CdXR0b246OnNsb3RDbGlja2VkKCkKIHsKICAgICBlbWl0IHNlc3Np
b25TZWxlY3RlZCAoIHRoaXMgKTsKZGlmZiAtLWdpdCBhL3NyYy9zZXNzaW9uYnV0dG9uLmggYi9z
cmMvc2Vzc2lvbmJ1dHRvbi5oCmluZGV4IGQ2ODYzOWMuLjk2MmQ3OTYgMTAwNjQ0Ci0tLSBhL3Ny
Yy9zZXNzaW9uYnV0dG9uLmgKKysrIGIvc3JjL3Nlc3Npb25idXR0b24uaApAQCAtOTMsNiArOTMs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0dXBDb21tYW5kKCk7CiAgICAgUUNvbWJvQm94KiBj
cmVhdGVHZW9tZXRyeUJveCgpOwogICAgIHZvaWQgc2V0dXBHZW9tZXRyeSgpOworICAgIHZvaWQg
c2V0dXBTZXNzaW9uKCk7CisgICAgdm9pZCBzZXR1cFNvdW5kKCk7CiAKIHByaXZhdGUgc2xvdHM6
CiAgICAgdm9pZCBzbG90Q2xpY2tlZCgpOwotLSAKMi4yNy4wCgo=
--000000000000c9530205a780703c
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0009-Refactor-Extract-server-setup.patch"
Content-Disposition: attachment; 
	filename="0009-Refactor-Extract-server-setup.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_kb58c30a34>
X-Attachment-Id: f_kb58c30a34

RnJvbSBjMWFmMzNiZDMwOGU3YmFmNjhlZTRmZDk4ZjJlMTNjYmM3MTllYzIzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENoYW1iZXJsaW4tS2lkZCA8ZGF2ZUBmbGFtYW5nb2Vz
LmNvLnVrPgpEYXRlOiBTdW4sIDE3IE1heSAyMDIwIDAwOjAyOjE3ICswMTAwClN1YmplY3Q6IFtQ
QVRDSCAwOS80M10gUmVmYWN0b3I6IEV4dHJhY3Qgc2VydmVyIHNldHVwCgotLS0KIHNyYy9zZXNz
aW9uYnV0dG9uLmNwcCB8IDkgKysrKysrLS0tCiBzcmMvc2Vzc2lvbmJ1dHRvbi5oICAgfCAxICsK
IDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAt
LWdpdCBhL3NyYy9zZXNzaW9uYnV0dG9uLmNwcCBiL3NyYy9zZXNzaW9uYnV0dG9uLmNwcAppbmRl
eCBmZjU5ZTEyLi40NmIwZWQ5IDEwMDY0NAotLS0gYS9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAKKysr
IGIvc3JjL3Nlc3Npb25idXR0b24uY3BwCkBAIC05Myw5ICs5Myw3IEBAIFNlc3Npb25CdXR0b246
OlNlc3Npb25CdXR0b24gKCBPTk1haW5XaW5kb3cqIG13LFFXaWRnZXQgKnBhcmVudCwgUVN0cmlu
ZyBpZCApCiAKICAgICBpY29uPW5ldyBRTGFiZWwgKCB0aGlzICk7CiAKLSAgICBzZXJ2ZXI9bmV3
IFFMYWJlbCAoIHRoaXMgKTsKLSAgICBzZXJ2ZXJJY29uPW5ldyBRTGFiZWwgKCB0aGlzICk7Ci0K
KyAgICBzZXR1cFNlcnZlcigpOwogICAgIHNldHVwU291bmQoKTsKIAogICAgIFFQYWxldHRlIG9w
dGlvbnNQYWxldHRlID0gY21kQm94LT5wYWxldHRlKCk7IApAQCAtMjkyLDYgKzI5MCwxMSBAQCB2
b2lkIFNlc3Npb25CdXR0b246OnNldHVwQ29tbWFuZCgpewogICAgIGNtZEJveC0+c2V0RnJhbWUg
KCBmYWxzZSApOwogfQogCit2b2lkIFNlc3Npb25CdXR0b246OnNldHVwU2VydmVyKCl7CisgICAg
c2VydmVyPW5ldyBRTGFiZWwgKCB0aGlzICk7CisgICAgc2VydmVySWNvbj1uZXcgUUxhYmVsICgg
dGhpcyApOworfQorCiB2b2lkIFNlc3Npb25CdXR0b246OnNldHVwU291bmQoKXsKICAgICBzb3Vu
ZD1uZXcgUVB1c2hCdXR0b24gKCB0aGlzICk7CiAgICAgc291bmQtPnNldEZsYXQgKCB0cnVlICk7
CmRpZmYgLS1naXQgYS9zcmMvc2Vzc2lvbmJ1dHRvbi5oIGIvc3JjL3Nlc3Npb25idXR0b24uaApp
bmRleCA5NjJkNzk2Li5jMjZhZDQ0IDEwMDY0NAotLS0gYS9zcmMvc2Vzc2lvbmJ1dHRvbi5oCisr
KyBiL3NyYy9zZXNzaW9uYnV0dG9uLmgKQEAgLTk1LDYgKzk1LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHNldHVwR2VvbWV0cnkoKTsKICAgICB2b2lkIHNldHVwU2Vzc2lvbigpOwogICAgIHZvaWQg
c2V0dXBTb3VuZCgpOworICAgIHZvaWQgc2V0dXBTZXJ2ZXIoKTsKIAogcHJpdmF0ZSBzbG90czoK
ICAgICB2b2lkIHNsb3RDbGlja2VkKCk7Ci0tIAoyLjI3LjAKCg==
--000000000000c9530205a780703c
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0010-Refactor-Extract-edit-button-setup.patch"
Content-Disposition: attachment; 
	filename="0010-Refactor-Extract-edit-button-setup.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_kb58c30633>
X-Attachment-Id: f_kb58c30633

RnJvbSBlOWExNWUwYjEzNGI1MTM5MTc2ZGNjOGM3M2FiZTFiZmZkNDYxNzI0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENoYW1iZXJsaW4tS2lkZCA8ZGF2ZUBmbGFtYW5nb2Vz
LmNvLnVrPgpEYXRlOiBTdW4sIDE3IE1heSAyMDIwIDAwOjA2OjAxICswMTAwClN1YmplY3Q6IFtQ
QVRDSCAxMC80M10gUmVmYWN0b3I6IEV4dHJhY3QgZWRpdCBidXR0b24gc2V0dXAKCi0tLQogc3Jj
L3Nlc3Npb25idXR0b24uY3BwIHwgOCArKysrKystLQogc3JjL3Nlc3Npb25idXR0b24uaCAgIHwg
MSArCiAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAgYi9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAK
aW5kZXggNDZiMGVkOS4uMDA2OWE1ZCAxMDA2NDQKLS0tIGEvc3JjL3Nlc3Npb25idXR0b24uY3Bw
CisrKyBiL3NyYy9zZXNzaW9uYnV0dG9uLmNwcApAQCAtMTA1LDggKzEwNSw3IEBAIFNlc3Npb25C
dXR0b246OlNlc3Npb25CdXR0b24gKCBPTk1haW5XaW5kb3cqIG13LFFXaWRnZXQgKnBhcmVudCwg
UVN0cmluZyBpZCApCiAgICAgY29ubmVjdCAoIHNvdW5kLFNJR05BTCAoIGNsaWNrZWQoKSApLHRo
aXMsCiAgICAgICAgICAgICAgIFNMT1QgKCBzbG90X3NvdW5kQ2xpY2tlZCgpICkgKTsKIAotICAg
IGVkaXRCdXQ9bmV3IFFQdXNoQnV0dG9uICggdGhpcyApOwotICAgIGVkaXRCdXQtPnNldE1vdXNl
VHJhY2tpbmcgKCB0cnVlICk7CisgICAgc2V0dXBFZGl0QnV0dG9uKCk7CiAgICAgY29ubmVjdCAo
IGVkaXRCdXQsU0lHTkFMICggcHJlc3NlZCgpICksdGhpcyxTTE9UICggc2xvdFNob3dNZW51KCkg
KSApOwogCiAgICAgLyogTG9hZCBvdXIgZWRpdCBidXR0b24gU1ZHIGZpbGUuICovCkBAIC0zMDIs
NiArMzAxLDExIEBAIHZvaWQgU2Vzc2lvbkJ1dHRvbjo6c2V0dXBTb3VuZCgpewogICAgIHNvdW5k
SWNvbj1uZXcgUUxhYmVsICggdGhpcyApOwogfQogCit2b2lkIFNlc3Npb25CdXR0b246OnNldHVw
RWRpdEJ1dHRvbigpeworICAgIGVkaXRCdXQ9bmV3IFFQdXNoQnV0dG9uICggdGhpcyApOworICAg
IGVkaXRCdXQtPnNldE1vdXNlVHJhY2tpbmcgKCB0cnVlICk7Cit9CisKIHZvaWQgU2Vzc2lvbkJ1
dHRvbjo6c2xvdENsaWNrZWQoKQogewogICAgIGVtaXQgc2Vzc2lvblNlbGVjdGVkICggdGhpcyAp
OwpkaWZmIC0tZ2l0IGEvc3JjL3Nlc3Npb25idXR0b24uaCBiL3NyYy9zZXNzaW9uYnV0dG9uLmgK
aW5kZXggYzI2YWQ0NC4uZWI1ZjVmOCAxMDA2NDQKLS0tIGEvc3JjL3Nlc3Npb25idXR0b24uaAor
KysgYi9zcmMvc2Vzc2lvbmJ1dHRvbi5oCkBAIC05Niw2ICs5Niw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzZXR1cFNlc3Npb24oKTsKICAgICB2b2lkIHNldHVwU291bmQoKTsKICAgICB2b2lkIHNl
dHVwU2VydmVyKCk7CisgICAgdm9pZCBzZXR1cEVkaXRCdXR0b24oKTsKIAogcHJpdmF0ZSBzbG90
czoKICAgICB2b2lkIHNsb3RDbGlja2VkKCk7Ci0tIAoyLjI3LjAKCg==
--000000000000c9530205a780703c
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0006-Refactor-Extract-command-setup.patch"
Content-Disposition: attachment; 
	filename="0006-Refactor-Extract-command-setup.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_kb58c30m37>
X-Attachment-Id: f_kb58c30m37

RnJvbSA3YWE0YjE3NTVmMjVmYzY4ZmNiNjk3YTBiOWRkZWViY2Y3NTY5NzJkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENoYW1iZXJsaW4tS2lkZCA8ZGF2ZUBmbGFtYW5nb2Vz
LmNvLnVrPgpEYXRlOiBTYXQsIDE2IE1heSAyMDIwIDIzOjQyOjAxICswMTAwClN1YmplY3Q6IFtQ
QVRDSCAwNi80M10gUmVmYWN0b3I6IEV4dHJhY3QgY29tbWFuZCBzZXR1cAoKLS0tCiBzcmMvc2Vz
c2lvbmJ1dHRvbi5jcHAgfCAxOCArKysrKysrKysrKy0tLS0tLS0KIHNyYy9zZXNzaW9uYnV0dG9u
LmggICB8ICAxICsKIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAgYi9zcmMvc2Vzc2lvbmJ1
dHRvbi5jcHAKaW5kZXggMGZiMDNmNC4uNjA3MzQ2MCAxMDA2NDQKLS0tIGEvc3JjL3Nlc3Npb25i
dXR0b24uY3BwCisrKyBiL3NyYy9zZXNzaW9uYnV0dG9uLmNwcApAQCAtODEsMTMgKzgxLDcgQEAg
U2Vzc2lvbkJ1dHRvbjo6U2Vzc2lvbkJ1dHRvbiAoIE9OTWFpbldpbmRvdyogbXcsUVdpZGdldCAq
cGFyZW50LCBRU3RyaW5nIGlkICkKIAogICAgIHNpZD1pZDsKIAotICAgIGNtZD1uZXcgUUxhYmVs
ICggdGhpcyApOwotICAgIGNtZC0+c2V0TW91c2VUcmFja2luZyAoIHRydWUgKTsKLSAgICBjbWRJ
Y29uPW5ldyBRTGFiZWwgKCB0aGlzICk7Ci0gICAgY21kSWNvbi0+c2V0TW91c2VUcmFja2luZyAo
IHRydWUgKTsKLSAgICBjbWRCb3g9bmV3IFFDb21ib0JveCAoIHRoaXMgKTsKLSAgICBjbWRCb3gt
PnNldE1vdXNlVHJhY2tpbmcgKCB0cnVlICk7Ci0gICAgY21kQm94LT5zZXRGcmFtZSAoIGZhbHNl
ICk7CisgICAgc2V0dXBDb21tYW5kKCk7CiAKICAgICBnZW9tQm94PWNyZWF0ZUdlb21ldHJ5Qm94
KCk7CiAgICAgZ2VvbT1uZXcgUUxhYmVsICggdGhpcyApOwpAQCAtMjk0LDYgKzI4OCwxNiBAQCBR
Q29tYm9Cb3gqIFNlc3Npb25CdXR0b246OmNyZWF0ZUdlb21ldHJ5Qm94KCkKICAgICByZXR1cm4g
Z2VvbUJveDsKIH0KIAordm9pZCBTZXNzaW9uQnV0dG9uOjpzZXR1cENvbW1hbmQoKXsKKyAgICBj
bWQ9bmV3IFFMYWJlbCAoIHRoaXMgKTsKKyAgICBjbWQtPnNldE1vdXNlVHJhY2tpbmcgKCB0cnVl
ICk7CisgICAgY21kSWNvbj1uZXcgUUxhYmVsICggdGhpcyApOworICAgIGNtZEljb24tPnNldE1v
dXNlVHJhY2tpbmcgKCB0cnVlICk7CisgICAgY21kQm94PW5ldyBRQ29tYm9Cb3ggKCB0aGlzICk7
CisgICAgY21kQm94LT5zZXRNb3VzZVRyYWNraW5nICggdHJ1ZSApOworICAgIGNtZEJveC0+c2V0
RnJhbWUgKCBmYWxzZSApOworfQorCiB2b2lkIFNlc3Npb25CdXR0b246OnNsb3RDbGlja2VkKCkK
IHsKICAgICBlbWl0IHNlc3Npb25TZWxlY3RlZCAoIHRoaXMgKTsKZGlmZiAtLWdpdCBhL3NyYy9z
ZXNzaW9uYnV0dG9uLmggYi9zcmMvc2Vzc2lvbmJ1dHRvbi5oCmluZGV4IGU4MmQyNzkuLjZmY2E5
MjEgMTAwNjQ0Ci0tLSBhL3NyYy9zZXNzaW9uYnV0dG9uLmgKKysrIGIvc3JjL3Nlc3Npb25idXR0
b24uaApAQCAtOTAsNiArOTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgdXBkYXRlZDsKIAogICAg
IHZvaWQgc2V0dXBPcHRpb25zUGFsZXR0ZSAoIFFQYWxldHRlICZjcGFsICk7CisgICAgdm9pZCBz
ZXR1cENvbW1hbmQoKTsKICAgICBRQ29tYm9Cb3gqIGNyZWF0ZUdlb21ldHJ5Qm94KCk7CiAKIHBy
aXZhdGUgc2xvdHM6Ci0tIAoyLjI3LjAKCg==
--000000000000c9530205a780703c
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0005-Refactor-Organise-object-creation-by-feature.patch"
Content-Disposition: attachment; 
	filename="0005-Refactor-Organise-object-creation-by-feature.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_kb58c30r38>
X-Attachment-Id: f_kb58c30r38

RnJvbSBmMDk0YTdhNjBlMDVlYWE4Y2VmNTZiMTUzM2YwNjZkYTM5ZDU0YjE1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENoYW1iZXJsaW4tS2lkZCA8ZGF2ZUBmbGFtYW5nb2Vz
LmNvLnVrPgpEYXRlOiBTYXQsIDE2IE1heSAyMDIwIDIzOjI4OjEwICswMTAwClN1YmplY3Q6IFtQ
QVRDSCAwNS80M10gUmVmYWN0b3I6IE9yZ2FuaXNlIG9iamVjdCBjcmVhdGlvbiBieSBmZWF0dXJl
CgpHcm91cGluZyBjb21wb25lbnRzIHJlYWR5IGZvciBmdXJ0aGVyIHJlZmFjdG9yaW5nCi0tLQog
c3JjL3Nlc3Npb25idXR0b24uY3BwIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t
LS0tLS0tLS0tLS0tCiBzcmMvc2Vzc2lvbmJ1dHRvbi5oICAgfCAgNCArKy0tCiAyIGZpbGVzIGNo
YW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny
Yy9zZXNzaW9uYnV0dG9uLmNwcCBiL3NyYy9zZXNzaW9uYnV0dG9uLmNwcAppbmRleCBmZDMyYzUx
Li4wZmIwM2Y0IDEwMDY0NAotLS0gYS9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAKKysrIGIvc3JjL3Nl
c3Npb25idXR0b24uY3BwCkBAIC04MSwzOCArODEsNDMgQEAgU2Vzc2lvbkJ1dHRvbjo6U2Vzc2lv
bkJ1dHRvbiAoIE9OTWFpbldpbmRvdyogbXcsUVdpZGdldCAqcGFyZW50LCBRU3RyaW5nIGlkICkK
IAogICAgIHNpZD1pZDsKIAorICAgIGNtZD1uZXcgUUxhYmVsICggdGhpcyApOworICAgIGNtZC0+
c2V0TW91c2VUcmFja2luZyAoIHRydWUgKTsKKyAgICBjbWRJY29uPW5ldyBRTGFiZWwgKCB0aGlz
ICk7CisgICAgY21kSWNvbi0+c2V0TW91c2VUcmFja2luZyAoIHRydWUgKTsKICAgICBjbWRCb3g9
bmV3IFFDb21ib0JveCAoIHRoaXMgKTsKICAgICBjbWRCb3gtPnNldE1vdXNlVHJhY2tpbmcgKCB0
cnVlICk7CiAgICAgY21kQm94LT5zZXRGcmFtZSAoIGZhbHNlICk7CiAKLSAgICBRUGFsZXR0ZSBv
cHRpb25zUGFsZXR0ZSA9IGNtZEJveC0+cGFsZXR0ZSgpOyAKLSAgICBzZXR1cE9wdGlvbnNQYWxl
dHRlKCBvcHRpb25zUGFsZXR0ZSApOwotCi0gICAgY21kQm94LT5zZXRQYWxldHRlICggb3B0aW9u
c1BhbGV0dGUgKTsKLSAgICBnZW9tQm94PWNyZWF0ZUdlb21ldHJ5Qm94KCBvcHRpb25zUGFsZXR0
ZSApOworICAgIGdlb21Cb3g9Y3JlYXRlR2VvbWV0cnlCb3goKTsKKyAgICBnZW9tPW5ldyBRTGFi
ZWwgKCB0aGlzICk7CisgICAgZ2VvbS0+c2V0TW91c2VUcmFja2luZyAoIHRydWUgKTsKKyAgICBn
ZW9tSWNvbj1uZXcgUUxhYmVsICggdGhpcyApOworICAgIGdlb21JY29uLT5zZXRNb3VzZVRyYWNr
aW5nICggdHJ1ZSApOwogCiAgICAgc2Vzc05hbWU9bmV3IFFMYWJlbCAoIHRoaXMgKTsKLSAgICBz
ZXNzU3RhdHVzPW5ldyBRTGFiZWwgKCB0aGlzICk7CiAgICAgZm50PXNlc3NOYW1lLT5mb250KCk7
CiAgICAgZm50LnNldEJvbGQgKCB0cnVlICk7CiAgICAgc2Vzc05hbWUtPnNldEZvbnQgKCBmbnQg
KTsKKworICAgIHNlc3NTdGF0dXM9bmV3IFFMYWJlbCAoIHRoaXMgKTsKKwogICAgIGljb249bmV3
IFFMYWJlbCAoIHRoaXMgKTsKLSAgICBjbWQ9bmV3IFFMYWJlbCAoIHRoaXMgKTsKLSAgICBjbWQt
PnNldE1vdXNlVHJhY2tpbmcgKCB0cnVlICk7Ci0gICAgc2VydmVySWNvbj1uZXcgUUxhYmVsICgg
dGhpcyApOwotICAgIGdlb21JY29uPW5ldyBRTGFiZWwgKCB0aGlzICk7Ci0gICAgZ2VvbUljb24t
PnNldE1vdXNlVHJhY2tpbmcgKCB0cnVlICk7Ci0gICAgY21kSWNvbj1uZXcgUUxhYmVsICggdGhp
cyApOwotICAgIGNtZEljb24tPnNldE1vdXNlVHJhY2tpbmcgKCB0cnVlICk7CisKICAgICBzZXJ2
ZXI9bmV3IFFMYWJlbCAoIHRoaXMgKTsKLSAgICBnZW9tPW5ldyBRTGFiZWwgKCB0aGlzICk7Ci0g
ICAgZ2VvbS0+c2V0TW91c2VUcmFja2luZyAoIHRydWUgKTsKKyAgICBzZXJ2ZXJJY29uPW5ldyBR
TGFiZWwgKCB0aGlzICk7CiAKICAgICBzb3VuZD1uZXcgUVB1c2hCdXR0b24gKCB0aGlzICk7Ci0g
ICAgc291bmRJY29uPW5ldyBRTGFiZWwgKCB0aGlzICk7Ci0gICAgc291bmQtPnNldFBhbGV0dGUg
KCBvcHRpb25zUGFsZXR0ZSApOwogICAgIHNvdW5kLT5zZXRGbGF0ICggdHJ1ZSApOwogICAgIHNv
dW5kLT5zZXRNb3VzZVRyYWNraW5nICggdHJ1ZSApOworICAgIHNvdW5kSWNvbj1uZXcgUUxhYmVs
ICggdGhpcyApOworCisgICAgUVBhbGV0dGUgb3B0aW9uc1BhbGV0dGUgPSBjbWRCb3gtPnBhbGV0
dGUoKTsgCisgICAgc2V0dXBPcHRpb25zUGFsZXR0ZSAoIG9wdGlvbnNQYWxldHRlICk7CisgICAg
Y21kQm94LT5zZXRQYWxldHRlICggb3B0aW9uc1BhbGV0dGUgKTsKKyAgICBnZW9tQm94LT5zZXRQ
YWxldHRlICggb3B0aW9uc1BhbGV0dGUgKTsKKyAgICBzb3VuZC0+c2V0UGFsZXR0ZSAoIG9wdGlv
bnNQYWxldHRlICk7CisKICAgICBjb25uZWN0ICggc291bmQsU0lHTkFMICggY2xpY2tlZCgpICks
dGhpcywKICAgICAgICAgICAgICAgU0xPVCAoIHNsb3Rfc291bmRDbGlja2VkKCkgKSApOwogCkBA
IC0yNzgsMTQgKzI4MywxMyBAQCB2b2lkIFNlc3Npb25CdXR0b246OnNldHVwT3B0aW9uc1BhbGV0
dGUoIFFQYWxldHRlICZjcGFsICkKICAgICBjcGFsLnNldENvbG9yICggUVBhbGV0dGU6OldpbmRv
dyxiYWNrZ3JvdW5kQ29sb3IgKTsKIH0KIAotUUNvbWJvQm94KiBTZXNzaW9uQnV0dG9uOjpjcmVh
dGVHZW9tZXRyeUJveCggY29uc3QgUVBhbGV0dGUgJm9wdGlvbnNQYWxldHRlICkKK1FDb21ib0Jv
eCogU2Vzc2lvbkJ1dHRvbjo6Y3JlYXRlR2VvbWV0cnlCb3goKQogewogICAgIFFDb21ib0JveCog
Z2VvbUJveCA9IG5ldyBRQ29tYm9Cb3goIHRoaXMgKTsKICAgICBnZW9tQm94LT5zZXRNb3VzZVRy
YWNraW5nKCB0cnVlICk7CiAgICAgZ2VvbUJveC0+c2V0RnJhbWUoIGZhbHNlICk7CiAgICAgZ2Vv
bUJveC0+c2V0RWRpdGFibGUoIGZhbHNlICk7CiAgICAgZ2VvbUJveC0+dXBkYXRlKCk7Ci0gICAg
Z2VvbUJveC0+c2V0UGFsZXR0ZSggb3B0aW9uc1BhbGV0dGUgKTsKIAogICAgIHJldHVybiBnZW9t
Qm94OwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Nlc3Npb25idXR0b24uaCBiL3NyYy9zZXNzaW9uYnV0
dG9uLmgKaW5kZXggZTFhNjBmNS4uZTgyZDI3OSAxMDA2NDQKLS0tIGEvc3JjL3Nlc3Npb25idXR0
b24uaAorKysgYi9zcmMvc2Vzc2lvbmJ1dHRvbi5oCkBAIC04OSw4ICs4OSw4IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBlZGl0YWJsZTsKICAgICBib29sIHVwZGF0ZWQ7CiAKLSAgICB2b2lkIHNldHVw
T3B0aW9uc1BhbGV0dGUoIFFQYWxldHRlICZjcGFsICk7Ci0gICAgUUNvbWJvQm94KiBjcmVhdGVH
ZW9tZXRyeUJveCggY29uc3QgUVBhbGV0dGUgJm9wdGlvbnNQYWxldHRlICk7CisgICAgdm9pZCBz
ZXR1cE9wdGlvbnNQYWxldHRlICggUVBhbGV0dGUgJmNwYWwgKTsKKyAgICBRQ29tYm9Cb3gqIGNy
ZWF0ZUdlb21ldHJ5Qm94KCk7CiAKIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBzbG90Q2xpY2tl
ZCgpOwotLSAKMi4yNy4wCgo=
--000000000000c9530205a780703c
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0004-Refactor-Remove-unnecessary-code.patch"
Content-Disposition: attachment; 
	filename="0004-Refactor-Remove-unnecessary-code.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_kb58c30v39>
X-Attachment-Id: f_kb58c30v39

RnJvbSAyZTZjNGQ5ODBlZjg0MzY2ODMwYzZmNzlkZmY5YjY1YzBiZTM0Y2VmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENoYW1iZXJsaW4tS2lkZCA8ZGF2ZUBmbGFtYW5nb2Vz
LmNvLnVrPgpEYXRlOiBTYXQsIDE2IE1heSAyMDIwIDIyOjQ0OjA2ICswMTAwClN1YmplY3Q6IFtQ
QVRDSCAwNC80M10gUmVmYWN0b3I6IFJlbW92ZSB1bm5lY2Vzc2FyeSBjb2RlCgotLS0KIHNyYy9z
ZXNzaW9uYnV0dG9uLmNwcCB8IDEgLQogMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKCmRp
ZmYgLS1naXQgYS9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAgYi9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAK
aW5kZXggOTNkNDMxNC4uZmQzMmM1MSAxMDA2NDQKLS0tIGEvc3JjL3Nlc3Npb25idXR0b24uY3Bw
CisrKyBiL3NyYy9zZXNzaW9uYnV0dG9uLmNwcApAQCAtMjgzLDcgKzI4Myw2IEBAIFFDb21ib0Jv
eCogU2Vzc2lvbkJ1dHRvbjo6Y3JlYXRlR2VvbWV0cnlCb3goIGNvbnN0IFFQYWxldHRlICZvcHRp
b25zUGFsZXR0ZSApCiAgICAgUUNvbWJvQm94KiBnZW9tQm94ID0gbmV3IFFDb21ib0JveCggdGhp
cyApOwogICAgIGdlb21Cb3gtPnNldE1vdXNlVHJhY2tpbmcoIHRydWUgKTsKICAgICBnZW9tQm94
LT5zZXRGcmFtZSggZmFsc2UgKTsKLSAgICBnZW9tQm94LT5zZXRFZGl0YWJsZSggdHJ1ZSApOwog
ICAgIGdlb21Cb3gtPnNldEVkaXRhYmxlKCBmYWxzZSApOwogICAgIGdlb21Cb3gtPnVwZGF0ZSgp
OwogICAgIGdlb21Cb3gtPnNldFBhbGV0dGUoIG9wdGlvbnNQYWxldHRlICk7Ci0tIAoyLjI3LjAK
Cg==
--000000000000c9530205a780703c
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0003-Refactor-Use-constant-for-color.patch"
Content-Disposition: attachment; 
	filename="0003-Refactor-Use-constant-for-color.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_kb58c30z40>
X-Attachment-Id: f_kb58c30z40

RnJvbSBiOTQwZjRhZGZmYWNhODQzM2Y1ZTBiNDdiOWQ4Y2MwNzc2YjA0NjIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENoYW1iZXJsaW4tS2lkZCA8ZGF2ZUBmbGFtYW5nb2Vz
LmNvLnVrPgpEYXRlOiBTYXQsIDE2IE1heSAyMDIwIDIyOjI4OjI1ICswMTAwClN1YmplY3Q6IFtQ
QVRDSCAwMy80M10gUmVmYWN0b3I6IFVzZSBjb25zdGFudCBmb3IgY29sb3IKCi0tLQogc3JjL3Nl
c3Npb25idXR0b24uY3BwIHwgMTAgKysrKysrLS0tLQogMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0
aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvc2Vzc2lvbmJ1dHRvbi5j
cHAgYi9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAKaW5kZXggZDc4ODM0MC4uOTNkNDMxNCAxMDA2NDQK
LS0tIGEvc3JjL3Nlc3Npb25idXR0b24uY3BwCisrKyBiL3NyYy9zZXNzaW9uYnV0dG9uLmNwcApA
QCAtMjY5LDExICsyNjksMTMgQEAgU2Vzc2lvbkJ1dHRvbjo6U2Vzc2lvbkJ1dHRvbiAoIE9OTWFp
bldpbmRvdyogbXcsUVdpZGdldCAqcGFyZW50LCBRU3RyaW5nIGlkICkKIFNlc3Npb25CdXR0b246
On5TZXNzaW9uQnV0dG9uKCkKIHt9CiAKLXZvaWQgU2Vzc2lvbkJ1dHRvbjo6c2V0dXBPcHRpb25z
UGFsZXR0ZShRUGFsZXR0ZSAmY3BhbCkKK3ZvaWQgU2Vzc2lvbkJ1dHRvbjo6c2V0dXBPcHRpb25z
UGFsZXR0ZSggUVBhbGV0dGUgJmNwYWwgKQogewotICAgIGNwYWwuc2V0Q29sb3IgKCBRUGFsZXR0
ZTo6QnV0dG9uLFFDb2xvciAoIDI1NSwyNTUsMjU1ICkgKTsKLSAgICBjcGFsLnNldENvbG9yICgg
UVBhbGV0dGU6OkJhc2UsUUNvbG9yICggMjU1LDI1NSwyNTUgKSApOwotICAgIGNwYWwuc2V0Q29s
b3IgKCBRUGFsZXR0ZTo6V2luZG93LFFDb2xvciAoIDI1NSwyNTUsMjU1ICkgKTsKKyAgICBRQ29s
b3IgYmFja2dyb3VuZENvbG9yID0gUXQ6OndoaXRlOyAKKworICAgIGNwYWwuc2V0Q29sb3IgKCBR
UGFsZXR0ZTo6QnV0dG9uLGJhY2tncm91bmRDb2xvciApOworICAgIGNwYWwuc2V0Q29sb3IgKCBR
UGFsZXR0ZTo6QmFzZSxiYWNrZ3JvdW5kQ29sb3IgKTsKKyAgICBjcGFsLnNldENvbG9yICggUVBh
bGV0dGU6OldpbmRvdyxiYWNrZ3JvdW5kQ29sb3IgKTsKIH0KIAogUUNvbWJvQm94KiBTZXNzaW9u
QnV0dG9uOjpjcmVhdGVHZW9tZXRyeUJveCggY29uc3QgUVBhbGV0dGUgJm9wdGlvbnNQYWxldHRl
ICkKLS0gCjIuMjcuMAoK
--000000000000c9530205a780703c
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0002-Refactor-Extract-geometry-box-setup.patch"
Content-Disposition: attachment; 
	filename="0002-Refactor-Extract-geometry-box-setup.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_kb58c31341>
X-Attachment-Id: f_kb58c31341

RnJvbSA3NzFkY2MxNjc5MmI4NTM0YmRmNWJlMzJjZjU3NWVhNjU2NmU0MTg3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENoYW1iZXJsaW4tS2lkZCA8ZGF2ZUBmbGFtYW5nb2Vz
LmNvLnVrPgpEYXRlOiBTYXQsIDE2IE1heSAyMDIwIDIyOjIyOjQ5ICswMTAwClN1YmplY3Q6IFtQ
QVRDSCAwMi80M10gUmVmYWN0b3I6IEV4dHJhY3QgZ2VvbWV0cnkgYm94IHNldHVwCgotLS0KIHNy
Yy9zZXNzaW9uYnV0dG9uLmNwcCB8IDIyICsrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9zZXNz
aW9uYnV0dG9uLmggICB8ICAxICsKIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwg
OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAgYi9zcmMv
c2Vzc2lvbmJ1dHRvbi5jcHAKaW5kZXggNjY1MTgzMy4uZDc4ODM0MCAxMDA2NDQKLS0tIGEvc3Jj
L3Nlc3Npb25idXR0b24uY3BwCisrKyBiL3NyYy9zZXNzaW9uYnV0dG9uLmNwcApAQCAtODksMTQg
Kzg5LDcgQEAgU2Vzc2lvbkJ1dHRvbjo6U2Vzc2lvbkJ1dHRvbiAoIE9OTWFpbldpbmRvdyogbXcs
UVdpZGdldCAqcGFyZW50LCBRU3RyaW5nIGlkICkKICAgICBzZXR1cE9wdGlvbnNQYWxldHRlKCBv
cHRpb25zUGFsZXR0ZSApOwogCiAgICAgY21kQm94LT5zZXRQYWxldHRlICggb3B0aW9uc1BhbGV0
dGUgKTsKLQotICAgIGdlb21Cb3g9bmV3IFFDb21ib0JveCAoIHRoaXMgKTsKLSAgICBnZW9tQm94
LT5zZXRNb3VzZVRyYWNraW5nICggdHJ1ZSApOwotICAgIGdlb21Cb3gtPnNldEZyYW1lICggZmFs
c2UgKTsKLSAgICBnZW9tQm94LT5zZXRFZGl0YWJsZSAoIHRydWUgKTsKLSAgICBnZW9tQm94LT5z
ZXRFZGl0YWJsZSAoIGZhbHNlICk7Ci0gICAgZ2VvbUJveC0+dXBkYXRlKCk7Ci0gICAgZ2VvbUJv
eC0+c2V0UGFsZXR0ZSAoIG9wdGlvbnNQYWxldHRlICk7CisgICAgZ2VvbUJveD1jcmVhdGVHZW9t
ZXRyeUJveCggb3B0aW9uc1BhbGV0dGUgKTsKIAogICAgIHNlc3NOYW1lPW5ldyBRTGFiZWwgKCB0
aGlzICk7CiAgICAgc2Vzc1N0YXR1cz1uZXcgUUxhYmVsICggdGhpcyApOwpAQCAtMjgzLDYgKzI3
NiwxOSBAQCB2b2lkIFNlc3Npb25CdXR0b246OnNldHVwT3B0aW9uc1BhbGV0dGUoUVBhbGV0dGUg
JmNwYWwpCiAgICAgY3BhbC5zZXRDb2xvciAoIFFQYWxldHRlOjpXaW5kb3csUUNvbG9yICggMjU1
LDI1NSwyNTUgKSApOwogfQogCitRQ29tYm9Cb3gqIFNlc3Npb25CdXR0b246OmNyZWF0ZUdlb21l
dHJ5Qm94KCBjb25zdCBRUGFsZXR0ZSAmb3B0aW9uc1BhbGV0dGUgKQoreworICAgIFFDb21ib0Jv
eCogZ2VvbUJveCA9IG5ldyBRQ29tYm9Cb3goIHRoaXMgKTsKKyAgICBnZW9tQm94LT5zZXRNb3Vz
ZVRyYWNraW5nKCB0cnVlICk7CisgICAgZ2VvbUJveC0+c2V0RnJhbWUoIGZhbHNlICk7CisgICAg
Z2VvbUJveC0+c2V0RWRpdGFibGUoIHRydWUgKTsKKyAgICBnZW9tQm94LT5zZXRFZGl0YWJsZSgg
ZmFsc2UgKTsKKyAgICBnZW9tQm94LT51cGRhdGUoKTsKKyAgICBnZW9tQm94LT5zZXRQYWxldHRl
KCBvcHRpb25zUGFsZXR0ZSApOworCisgICAgcmV0dXJuIGdlb21Cb3g7Cit9CisKIHZvaWQgU2Vz
c2lvbkJ1dHRvbjo6c2xvdENsaWNrZWQoKQogewogICAgIGVtaXQgc2Vzc2lvblNlbGVjdGVkICgg
dGhpcyApOwpkaWZmIC0tZ2l0IGEvc3JjL3Nlc3Npb25idXR0b24uaCBiL3NyYy9zZXNzaW9uYnV0
dG9uLmgKaW5kZXggOGUyMWNjZi4uZTFhNjBmNSAxMDA2NDQKLS0tIGEvc3JjL3Nlc3Npb25idXR0
b24uaAorKysgYi9zcmMvc2Vzc2lvbmJ1dHRvbi5oCkBAIC05MCw2ICs5MCw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCB1cGRhdGVkOwogCiAgICAgdm9pZCBzZXR1cE9wdGlvbnNQYWxldHRlKCBRUGFs
ZXR0ZSAmY3BhbCApOworICAgIFFDb21ib0JveCogY3JlYXRlR2VvbWV0cnlCb3goIGNvbnN0IFFQ
YWxldHRlICZvcHRpb25zUGFsZXR0ZSApOwogCiBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgc2xv
dENsaWNrZWQoKTsKLS0gCjIuMjcuMAoK
--000000000000c9530205a780703c
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0001-Refactor-Extract-palette-setup.patch"
Content-Disposition: attachment; 
	filename="0001-Refactor-Extract-palette-setup.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_kb58c31742>
X-Attachment-Id: f_kb58c31742

RnJvbSAyM2M5MDdlNTdiOTUyNTExY2JhMWI0N2QwODE0MThhMDVlNTJiZjg3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZlIENoYW1iZXJsaW4tS2lkZCA8ZGF2ZUBmbGFtYW5nb2Vz
LmNvLnVrPgpEYXRlOiBGcmksIDE1IE1heSAyMDIwIDIxOjU2OjU3ICswMTAwClN1YmplY3Q6IFtQ
QVRDSCAwMS80M10gUmVmYWN0b3I6IEV4dHJhY3QgcGFsZXR0ZSBzZXR1cAoKLS0tCiBzcmMvc2Vz
c2lvbmJ1dHRvbi5jcHAgfCAyNCArKysrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9zZXNzaW9u
YnV0dG9uLmggICB8ICAyICsrCiAyIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDgg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3Nlc3Npb25idXR0b24uY3BwIGIvc3JjL3Nl
c3Npb25idXR0b24uY3BwCmluZGV4IDBhNDZlZTYuLjY2NTE4MzMgMTAwNjQ0Ci0tLSBhL3NyYy9z
ZXNzaW9uYnV0dG9uLmNwcAorKysgYi9zcmMvc2Vzc2lvbmJ1dHRvbi5jcHAKQEAgLTg0LDEyICs4
NCwxMSBAQCBTZXNzaW9uQnV0dG9uOjpTZXNzaW9uQnV0dG9uICggT05NYWluV2luZG93KiBtdyxR
V2lkZ2V0ICpwYXJlbnQsIFFTdHJpbmcgaWQgKQogICAgIGNtZEJveD1uZXcgUUNvbWJvQm94ICgg
dGhpcyApOwogICAgIGNtZEJveC0+c2V0TW91c2VUcmFja2luZyAoIHRydWUgKTsKICAgICBjbWRC
b3gtPnNldEZyYW1lICggZmFsc2UgKTsKLSAgICBRUGFsZXR0ZSBjcGFsPWNtZEJveC0+cGFsZXR0
ZSgpOwogCi0gICAgY3BhbC5zZXRDb2xvciAoIFFQYWxldHRlOjpCdXR0b24sUUNvbG9yICggMjU1
LDI1NSwyNTUgKSApOwotICAgIGNwYWwuc2V0Q29sb3IgKCBRUGFsZXR0ZTo6QmFzZSxRQ29sb3Ig
KCAyNTUsMjU1LDI1NSApICk7Ci0gICAgY3BhbC5zZXRDb2xvciAoIFFQYWxldHRlOjpXaW5kb3cs
UUNvbG9yICggMjU1LDI1NSwyNTUgKSApOwotICAgIGNtZEJveC0+c2V0UGFsZXR0ZSAoIGNwYWwg
KTsKKyAgICBRUGFsZXR0ZSBvcHRpb25zUGFsZXR0ZSA9IGNtZEJveC0+cGFsZXR0ZSgpOyAKKyAg
ICBzZXR1cE9wdGlvbnNQYWxldHRlKCBvcHRpb25zUGFsZXR0ZSApOworCisgICAgY21kQm94LT5z
ZXRQYWxldHRlICggb3B0aW9uc1BhbGV0dGUgKTsKIAogICAgIGdlb21Cb3g9bmV3IFFDb21ib0Jv
eCAoIHRoaXMgKTsKICAgICBnZW9tQm94LT5zZXRNb3VzZVRyYWNraW5nICggdHJ1ZSApOwpAQCAt
OTcsNyArOTYsNyBAQCBTZXNzaW9uQnV0dG9uOjpTZXNzaW9uQnV0dG9uICggT05NYWluV2luZG93
KiBtdyxRV2lkZ2V0ICpwYXJlbnQsIFFTdHJpbmcgaWQgKQogICAgIGdlb21Cb3gtPnNldEVkaXRh
YmxlICggdHJ1ZSApOwogICAgIGdlb21Cb3gtPnNldEVkaXRhYmxlICggZmFsc2UgKTsKICAgICBn
ZW9tQm94LT51cGRhdGUoKTsKLSAgICBnZW9tQm94LT5zZXRQYWxldHRlICggY3BhbCApOworICAg
IGdlb21Cb3gtPnNldFBhbGV0dGUgKCBvcHRpb25zUGFsZXR0ZSApOwogCiAgICAgc2Vzc05hbWU9
bmV3IFFMYWJlbCAoIHRoaXMgKTsKICAgICBzZXNzU3RhdHVzPW5ldyBRTGFiZWwgKCB0aGlzICk7
CkBAIC0xMTgsNyArMTE3LDcgQEAgU2Vzc2lvbkJ1dHRvbjo6U2Vzc2lvbkJ1dHRvbiAoIE9OTWFp
bldpbmRvdyogbXcsUVdpZGdldCAqcGFyZW50LCBRU3RyaW5nIGlkICkKIAogICAgIHNvdW5kPW5l
dyBRUHVzaEJ1dHRvbiAoIHRoaXMgKTsKICAgICBzb3VuZEljb249bmV3IFFMYWJlbCAoIHRoaXMg
KTsKLSAgICBzb3VuZC0+c2V0UGFsZXR0ZSAoIGNwYWwgKTsKKyAgICBzb3VuZC0+c2V0UGFsZXR0
ZSAoIG9wdGlvbnNQYWxldHRlICk7CiAgICAgc291bmQtPnNldEZsYXQgKCB0cnVlICk7CiAgICAg
c291bmQtPnNldE1vdXNlVHJhY2tpbmcgKCB0cnVlICk7CiAgICAgY29ubmVjdCAoIHNvdW5kLFNJ
R05BTCAoIGNsaWNrZWQoKSApLHRoaXMsCkBAIC0xNDMsNyArMTQyLDcgQEAgU2Vzc2lvbkJ1dHRv
bjo6U2Vzc2lvbkJ1dHRvbiAoIE9OTWFpbldpbmRvdyogbXcsUVdpZGdldCAqcGFyZW50LCBRU3Ry
aW5nIGlkICkKICAgICBlZGl0QnV0LT5zZXRJY29uU2l6ZSAoIFFTaXplICggMTYsMTYgKSApOwog
ICAgIGVkaXRCdXQtPnNldEZpeGVkU2l6ZSAoIDI0LDI0ICk7CiAgICAgZWRpdEJ1dC0+c2V0Rmxh
dCAoIHRydWUgKTsKLSAgICBlZGl0QnV0LT5zZXRQYWxldHRlICggY3BhbCApOworICAgIGVkaXRC
dXQtPnNldFBhbGV0dGUgKCBvcHRpb25zUGFsZXR0ZSApOwogICAgIHNlc3NNZW51PW5ldyBRTWVu
dSAoIHRoaXMgKTsKIAogICAgIGNvbm5lY3QgKCBzZXNzTWVudSxTSUdOQUwgKCBhYm91dFRvSGlk
ZSgpICksdGhpcywKQEAgLTI3Nyw2ICsyNzYsMTMgQEAgU2Vzc2lvbkJ1dHRvbjo6U2Vzc2lvbkJ1
dHRvbiAoIE9OTWFpbldpbmRvdyogbXcsUVdpZGdldCAqcGFyZW50LCBRU3RyaW5nIGlkICkKIFNl
c3Npb25CdXR0b246On5TZXNzaW9uQnV0dG9uKCkKIHt9CiAKK3ZvaWQgU2Vzc2lvbkJ1dHRvbjo6
c2V0dXBPcHRpb25zUGFsZXR0ZShRUGFsZXR0ZSAmY3BhbCkKK3sKKyAgICBjcGFsLnNldENvbG9y
ICggUVBhbGV0dGU6OkJ1dHRvbixRQ29sb3IgKCAyNTUsMjU1LDI1NSApICk7CisgICAgY3BhbC5z
ZXRDb2xvciAoIFFQYWxldHRlOjpCYXNlLFFDb2xvciAoIDI1NSwyNTUsMjU1ICkgKTsKKyAgICBj
cGFsLnNldENvbG9yICggUVBhbGV0dGU6OldpbmRvdyxRQ29sb3IgKCAyNTUsMjU1LDI1NSApICk7
Cit9CisKIHZvaWQgU2Vzc2lvbkJ1dHRvbjo6c2xvdENsaWNrZWQoKQogewogICAgIGVtaXQgc2Vz
c2lvblNlbGVjdGVkICggdGhpcyApOwpAQCAtODEwLDYgKzgxNiw3IEBAIHZvaWQgU2Vzc2lvbkJ1
dHRvbjo6c2xvdF9jbWRfY2hhbmdlICggY29uc3QgUVN0cmluZyYgY29tbWFuZCApCiAgICAgYm9v
bCBuZXdSb290bGVzcz1yb290bGVzczsKICAgICBwdWJsaXNoZWQ9ZmFsc2U7CiAgICAgUVN0cmlu
ZyBjbWQ9Y29tbWFuZDsKKwogICAgIGlmICggY29tbWFuZD09IktERSIgKQogICAgIHsKICAgICAg
ICAgbmV3Um9vdGxlc3M9ZmFsc2U7CkBAIC04ODcsNiArODk0LDcgQEAgdm9pZCBTZXNzaW9uQnV0
dG9uOjpzbG90X2NtZF9jaGFuZ2UgKCBjb25zdCBRU3RyaW5nJiBjb21tYW5kICkKICAgICB9CiAg
ICAgZWxzZQogICAgICAgICBwaXgubG9hZCAoIHBhci0+aWNvbnNQYXRoICggIi8xNngxNi9YLnBu
ZyIgKSApOworCiAgICAgY21kSWNvbi0+c2V0UGl4bWFwICggcGl4ICk7CiAKICAgICBYMmdvU2V0
dGluZ3Mgc3QgKCAic2Vzc2lvbnMiICk7CmRpZmYgLS1naXQgYS9zcmMvc2Vzc2lvbmJ1dHRvbi5o
IGIvc3JjL3Nlc3Npb25idXR0b24uaAppbmRleCBkODMxZTYxLi44ZTIxY2NmIDEwMDY0NAotLS0g
YS9zcmMvc2Vzc2lvbmJ1dHRvbi5oCisrKyBiL3NyYy9zZXNzaW9uYnV0dG9uLmgKQEAgLTg5LDYg
Kzg5LDggQEAgcHJpdmF0ZToKICAgICBib29sIGVkaXRhYmxlOwogICAgIGJvb2wgdXBkYXRlZDsK
IAorICAgIHZvaWQgc2V0dXBPcHRpb25zUGFsZXR0ZSggUVBhbGV0dGUgJmNwYWwgKTsKKwogcHJp
dmF0ZSBzbG90czoKICAgICB2b2lkIHNsb3RDbGlja2VkKCk7CiAgICAgdm9pZCBzbG90RWRpdCgp
OwotLSAKMi4yNy4wCgo=
--000000000000c9530205a780703c--

