pbuffers, extensions to DRM

Jon Smirl jonsmirl@yahoo.com
Sat, 6 Dec 2003 09:36:59 -0800 (PST)


--0-162739267-1070732219=:6798
Content-Type: text/plain; charset=us-ascii
Content-Id: 
Content-Disposition: inline

--- Keith Whitwell <keith@tungstengraphics.com> wrote:

> > A work-around would be to draw a filled polygon to implement the clear, 
> > but I'm wondering where else there might be similar assumptions to trip 
> > us up.
> 
> Why not just fix the ioctl?

Yes fix the ioctl. I think there are four cases of clear that need to be fixed.
It is pretty obvious looking at the code. From the last time I looked at this I
believe that clear is the only command that needs to be fixed.

> > The other thing we need is a mechanism to allocate the memory for 
> > pbuffers.  My first guess is that this would have to be allocated out of 
> > the space used for textures.  I think the DRI texture memory allocator 
> > could be adapted to do this.
> 
> Correct.  There's a memory manager there for AGP space, but it's not 
> integrated with the texture manager.  In the i830 driver, particularly the one
> 
> on the agp-i865-0-1-branch, I have a kernel memory manager which integrates 
> fairly smoothly with the client-driver's texture memory manager.  This is 
> probably a decent starting point.
> 
We need a unified memory manager strategy . Putting it the driver is a good
idea. The code could be a feature common to all DRM modules. 

I would also use this manager in my initialization code when I init the first
display buffer and allocate memory for the hardware cursor. After thinking about
this for a second I shouldn't allocate any framebuffers at init time, instead I
should wait for a higher layer to tell me to make one.


DRM also needs a couple of minor extensions. I've asked Eric to add these but I
haven't heard back yet.

--------------------------------------------------------------

Could you provide me with an offical API for getting these items? It's stupid to
overlay the stats function to conserve IOCTLs.

DRM_STAT_PCI_VENDOR].value = dev->pdev->vendor;
DRM_STAT_PCI_DEVICE].value = dev->pdev->device;
DRM_STAT_PCI_SUB_VENDOR].value = dev->pdev->subsystem_vendor;
DRM_STAT_PCI_SUB_DEVICE].value = dev->pdev->subsystem_device;
DRM_STAT_IRQ_NUMBER].value = dev->pdev->irq;
DRM_STAT_PCI_MMIO_START].value = 0;
DRM_STAT_PCI_MMIO_LENGTH].value = 0;
DRM_STAT_PCI_FB_START].value = 0;
DRM_STAT_PCI_FB_LENGTH].value = 0;

The driver also needs to do pci_enable_deivce and pci_disable_device. The
version in the kernel tree does this but the one in DRI doesn't. Linus must have
added it.

Last thing I need is a function for returning a copy of the ROM. This could be
done generically. The radeon has a bug where the RADEON_MPP_TB_CONFIG register
needs to be written. This only has to be done once when the driver is loaded. 

It's also not clear to me the X needs to know the IRQ number. Why doesn't the
DRM module just send a signal on retrace?

=====
Jon Smirl
jonsmirl@yahoo.com

__________________________________
Do you Yahoo!?
New Yahoo! Photos - easier uploading and sharing.
http://photos.yahoo.com/
--0-162739267-1070732219=:6798
Content-Type: application/octet-stream; name=diff
Content-Transfer-Encoding: base64
Content-Description: diff
Content-Disposition: attachment; filename=diff

PyBEUklfRFJNLmtkZXZlbG9wCj8gRFJJX0RSTS5rZGV2ZWxvcC5maWxlbGlz
dAo/IERSSV9EUk0ua2RldmVsb3AucGNzCj8gRFJJX0RSTS5rZGV2c2VzCj8g
TWFrZWZpbGUKPyBkaWZmCkluZGV4OiBkcm0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL2RyaS94Yy94Yy9wcm9ncmFtcy9Yc2Vy
dmVyL2h3L3hmcmVlODYvb3Mtc3VwcG9ydC9saW51eC9kcm0va2VybmVsL0F0
dGljL2RybS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ2CmRpZmYgLXUg
LXUgLXIxLjQ2IGRybS5oCi0tLSBkcm0uaAkyMyBPY3QgMjAwMyAwMjoyMzoz
MSAtMDAwMAkxLjQ2CisrKyBkcm0uaAk2IERlYyAyMDAzIDA2OjE2OjMwIC0w
MDAwCkBAIC0yNzAsMjQgKzI3MCwzNyBAQAogCV9EUk1fU1RBVF9TRUNPTkRB
UlksCS8qKjwgU2Vjb25kYXJ5IERNQSBieXRlcyAqLwogCV9EUk1fU1RBVF9E
TUEsCQkvKio8IERNQSAqLwogCV9EUk1fU1RBVF9TUEVDSUFMLAkvKio8IFNw
ZWNpYWwgRE1BIChlLmcuLCBwcmlvcml0eSBvciBwb2xsZWQpICovCi0JX0RS
TV9TVEFUX01JU1NFRAkvKio8IE1pc3NlZCBETUEgb3Bwb3J0dW5pdHkgKi8K
LQotCQkJCS8qIEFkZCB0byB0aGUgKkVORCogb2YgdGhlIGxpc3QgKi8KKwlf
RFJNX1NUQVRfTUlTU0VELAkvKio8IE1pc3NlZCBETUEgb3Bwb3J0dW5pdHkg
Ki8KKyAgICAgICAgCisgICAgICAgIF9EUk1fU1RBVF9QQ0lfVkVORE9SLCAg
ICAgIC8qKjwgUENJIGNvZGUgZm9yIHByaW1hcnkgaGFyZHdhcmUgbWFudWZh
Y3R1cmVyICovCisgICAgICAgIF9EUk1fU1RBVF9QQ0lfREVWSUNFLCAgICAg
IC8qKjwgUENJIGNvZGUgZm9yIGNhcmQgKi8KKyAgICAgICAgX0RSTV9TVEFU
X1BDSV9TVUJfVkVORE9SLCAgLyoqPCBQQ0kgY29kZSBmb3IgYm9hcmQgbWFu
dWZhY3R1cmVyICovCisgICAgICAgIF9EUk1fU1RBVF9QQ0lfU1VCX0RFVklD
RSwgIC8qKjwgUENJIGNvZGUgZm9yIG1hbnVmYWN0dXJlcidzIGJvYXJkICov
CisgICAgICAgIF9EUk1fU1RBVF9JUlFfTlVNQkVSLCAgICAgIC8qKjwgSVJR
IG51bWJlciAqLworICAgICAgICAKKyAgICAgICAgX0RSTV9TVEFUX1BDSV9N
TUlPX1NUQVJULCAgLyoqPCBTdGFydGluZyBwaHlzaWNhbCBhZGRyZXNzIG9m
IE1NSU8gcmVnaW9uICovCisgICAgICAgIF9EUk1fU1RBVF9QQ0lfTU1JT19M
RU5HVEgsIC8qKjwgTGVuZ3RoIG9mIE1NSU8gcmVnaW9uICovCisgICAgICAg
IF9EUk1fU1RBVF9QQ0lfRkJfU1RBUlQsICAgIC8qKjwgU3RhcnRpbmcgcGh5
c2ljYWwgYWRkcmVzcyBvZiBmcmFtZWJ1ZmZlciBtZW1vcnkgKi8KKyAgICAg
ICAgX0RSTV9TVEFUX1BDSV9GQl9MRU5HVEgsICAgLyoqPCBMZW5ndGggb3Mg
ZnJhbWVidWZmZXIgbWVtb3J5ICovCisgICAgICAgIAorICAgICAgICAgLyog
QWRkIHRvIHRoZSAqRU5EKiBvZiB0aGUgbGlzdCAqLworICAgICAgICBfRFJN
X1NUQVRfTUFYLAkJICAgLyogRG9uJ3QgbW92ZSB0aGUgbmV4dCBsaW5lIGFi
b3ZlIHRoaXMgKi8KKyAgICAgICAgX0RSTV9TVEFUX01BWF8xXzAgPSBfRFJN
X1NUQVRfUENJX1ZFTkRPUiwKIH0gZHJtX3N0YXRfdHlwZV90OwogCit0eXBl
ZGVmIHN0cnVjdCBkcm1fc3RhdCB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcg
ICB2YWx1ZTsKKyAgICAgICAgZHJtX3N0YXRfdHlwZV90IHR5cGU7Cit9IGRy
bV9zdGF0X3Q7CiAKIC8qKgogICogRFJNX0lPQ1RMX0dFVF9TVEFUUyBpb2N0
bCBhcmd1bWVudCB0eXBlLgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fc3Rh
dHMgewogCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0Jc3RydWN0IHsKLQkJdW5z
aWduZWQgbG9uZyAgIHZhbHVlOwotCQlkcm1fc3RhdF90eXBlX3QgdHlwZTsK
LQl9IGRhdGFbMTVdOworICAgICAgICBkcm1fc3RhdF90IGRhdGFbX0RSTV9T
VEFUX01BWF07CiB9IGRybV9zdGF0c190OwogCi0KIC8qKgogICogSGFyZHdh
cmUgbG9ja2luZyBmbGFncy4KICAqLwpJbmRleDogZHJtX2J1ZnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2RyaS94Yy94Yy9w
cm9ncmFtcy9Yc2VydmVyL2h3L3hmcmVlODYvb3Mtc3VwcG9ydC9saW51eC9k
cm0va2VybmVsL2RybV9idWZzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MjUKZGlmZiAtdSAtdSAtcjEuMjUgZHJtX2J1ZnMuaAotLS0gZHJtX2J1ZnMu
aAk2IE5vdiAyMDAzIDA0OjQ4OjA2IC0wMDAwCTEuMjUKKysrIGRybV9idWZz
LmgJNiBEZWMgMjAwMyAwNjoxNjozMyAtMDAwMApAQCAtMTI3LDcgKzEyNyw3
IEBACiAJfQogCW1hcC0+bXRyciAgID0gLTE7CiAJbWFwLT5oYW5kbGUgPSAw
OwotCisgICAgICAgIAogCXN3aXRjaCAoIG1hcC0+dHlwZSApIHsKIAljYXNl
IF9EUk1fUkVHSVNURVJTOgogCWNhc2UgX0RSTV9GUkFNRV9CVUZGRVI6Cklu
ZGV4OiBkcm1fZHJ2LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9kcmkveGMveGMvcHJvZ3JhbXMvWHNlcnZlci9ody94ZnJlZTg2
L29zLXN1cHBvcnQvbGludXgvZHJtL2tlcm5lbC9kcm1fZHJ2LmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTEKZGlmZiAtdSAtdSAtcjEuNTEgZHJtX2Ry
di5oCi0tLSBkcm1fZHJ2LmgJNSBOb3YgMjAwMyAwODoxMzo1MiAtMDAwMAkx
LjUxCisrKyBkcm1fZHJ2LmgJNiBEZWMgMjAwMyAwNjoxNjozNyAtMDAwMApA
QCAtMTY2LDYgKzE2Niw4IEBACiBzdGF0aWMgZHJtX2RldmljZV90CURSTShk
ZXZpY2UpW01BWF9ERVZJQ0VTXTsKIHN0YXRpYyBpbnQJCURSTShudW1kZXZz
KSA9IDA7CiAKK3N0YXRpYyBpbnQgRFJNKGludGVyZmFjZSkgPSAweDEwMDsK
KwogRFJJVkVSX0ZPUFM7CiAKIC8qKiBJb2N0bCB0YWJsZSAqLwpAQCAtNTI5
LDYgKzUzMSw4IEBACiAJCWRldi0+bG9jay5maWxwID0gMDsKIAkJd2FrZV91
cF9pbnRlcnJ1cHRpYmxlKCAmZGV2LT5sb2NrLmxvY2tfcXVldWUgKTsKIAl9
CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldi0+cGRldik7CisKIAl1cCggJmRl
di0+c3RydWN0X3NlbSApOwogCiAJcmV0dXJuIDA7CkBAIC01NzQsNiArNTc4
LDcgQEAKIAlkZXYtPm5hbWUgICA9IERSSVZFUl9OQU1FOwogCiAJZGV2LT5w
ZGV2ICAgPSBwZGV2OworCXBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogI2lm
ZGVmIF9fYWxwaGFfXwogCWRldi0+aG9zZSAgID0gcGRldi0+c3lzZGF0YTsK
IAlkZXYtPnBjaV9kb21haW4gPSBkZXYtPmhvc2UtPmJ1cy0+bnVtYmVyOwpJ
bmRleDogZHJtX2lvY3RsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9kcmkveGMveGMvcHJvZ3JhbXMvWHNlcnZlci9ody94ZnJl
ZTg2L29zLXN1cHBvcnQvbGludXgvZHJtL2tlcm5lbC9kcm1faW9jdGwuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC11IC11IC1yMS4xNyBk
cm1faW9jdGwuaAotLS0gZHJtX2lvY3RsLmgJNSBOb3YgMjAwMyAwODoxMzo1
MiAtMDAwMAkxLjE3CisrKyBkcm1faW9jdGwuaAk2IERlYyAyMDAzIDA2OjE2
OjM3IC0wMDAwCkBAIC0yNjgsOSArMjY4LDExIEBACiAJZHJtX2ZpbGVfdCAg
ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAq
ZGV2ICA9IHByaXYtPmRldjsKIAlkcm1fc3RhdHNfdCAgc3RhdHM7Ci0JaW50
ICAgICAgICAgIGk7Ci0KKwlpbnQgICAgICAgICAgaSwgc3RhdF9zaXplOwor
ICAgICAgICAKKwlEUk1fREVCVUcoIlxuIik7CiAJbWVtc2V0KCZzdGF0cywg
MCwgc2l6ZW9mKHN0YXRzKSk7CisgICAgICAgIERSTV9ERUJVRygic2l6ZW9m
KHN0YXRzKSAlZFxuIiwgc2l6ZW9mKHN0YXRzKSk7CiAJCiAJZG93bigmZGV2
LT5zdHJ1Y3Rfc2VtKTsKIApAQCAtMjg3LDggKzI4OSwzNyBAQAogCXN0YXRz
LmNvdW50ID0gZGV2LT5jb3VudGVyczsKIAogCXVwKCZkZXYtPnN0cnVjdF9z
ZW0pOworICAgICAgICAKKyAgICAgICAgc3RhdF9zaXplID0gc2l6ZW9mKHN0
YXRzKTsKKyAgICAgICAgaWYgKERSTShpbnRlcmZhY2UpID09IDB4MTAwKSB7
CisgICAgICAgICAgICBzdGF0X3NpemUgLT0gKF9EUk1fU1RBVF9NQVggLSBf
RFJNX1NUQVRfTUFYXzFfMCkgKiBzaXplb2YoZHJtX3N0YXRfdCk7CisgICAg
ICAgICAgICBEUk1fREVCVUcoIlYxLjAgc3RhdCBzaXplICVkXG4iLCBzdGF0
X3NpemUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdHMu
ZGF0YVtfRFJNX1NUQVRfUENJX1ZFTkRPUl0udHlwZSA9IF9EUk1fU1RBVF9Q
Q0lfVkVORE9SOworICAgICAgICAgICAgc3RhdHMuZGF0YVtfRFJNX1NUQVRf
UENJX1ZFTkRPUl0udmFsdWUgPSBkZXYtPnBkZXYtPnZlbmRvcjsKKyAgICAg
ICAgICAgIHN0YXRzLmRhdGFbX0RSTV9TVEFUX1BDSV9ERVZJQ0VdLnR5cGUg
PSBfRFJNX1NUQVRfUENJX0RFVklDRTsKKyAgICAgICAgICAgIHN0YXRzLmRh
dGFbX0RSTV9TVEFUX1BDSV9ERVZJQ0VdLnZhbHVlID0gZGV2LT5wZGV2LT5k
ZXZpY2U7CisgICAgICAgICAgICBzdGF0cy5kYXRhW19EUk1fU1RBVF9QQ0lf
U1VCX1ZFTkRPUl0udHlwZSA9IF9EUk1fU1RBVF9QQ0lfU1VCX1ZFTkRPUjsK
KyAgICAgICAgICAgIHN0YXRzLmRhdGFbX0RSTV9TVEFUX1BDSV9TVUJfVkVO
RE9SXS52YWx1ZSA9IGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKyAg
ICAgICAgICAgIHN0YXRzLmRhdGFbX0RSTV9TVEFUX1BDSV9TVUJfREVWSUNF
XS50eXBlID0gX0RSTV9TVEFUX1BDSV9TVUJfREVWSUNFOworICAgICAgICAg
ICAgc3RhdHMuZGF0YVtfRFJNX1NUQVRfUENJX1NVQl9ERVZJQ0VdLnZhbHVl
ID0gZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOworICAgICAgICAgICAg
c3RhdHMuZGF0YVtfRFJNX1NUQVRfSVJRX05VTUJFUl0udHlwZSA9IF9EUk1f
U1RBVF9JUlFfTlVNQkVSOworICAgICAgICAgICAgc3RhdHMuZGF0YVtfRFJN
X1NUQVRfSVJRX05VTUJFUl0udmFsdWUgPSBkZXYtPnBkZXYtPmlycTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgc3RhdHMuZGF0YVtfRFJNX1NUQVRf
UENJX01NSU9fU1RBUlRdLnR5cGUgPSBfRFJNX1NUQVRfUENJX01NSU9fU1RB
UlQ7CisgICAgICAgICAgICBzdGF0cy5kYXRhW19EUk1fU1RBVF9QQ0lfTU1J
T19TVEFSVF0udmFsdWUgPSAwOworICAgICAgICAgICAgc3RhdHMuZGF0YVtf
RFJNX1NUQVRfUENJX01NSU9fTEVOR1RIXS50eXBlID0gX0RSTV9TVEFUX1BD
SV9NTUlPX0xFTkdUSDsKKyAgICAgICAgICAgIHN0YXRzLmRhdGFbX0RSTV9T
VEFUX1BDSV9NTUlPX0xFTkdUSF0udmFsdWUgPSAwOworICAgICAgICAgICAg
c3RhdHMuZGF0YVtfRFJNX1NUQVRfUENJX0ZCX1NUQVJUXS50eXBlID0gX0RS
TV9TVEFUX1BDSV9GQl9TVEFSVDsKKyAgICAgICAgICAgIHN0YXRzLmRhdGFb
X0RSTV9TVEFUX1BDSV9GQl9TVEFSVF0udmFsdWUgPSAwOworICAgICAgICAg
ICAgc3RhdHMuZGF0YVtfRFJNX1NUQVRfUENJX0ZCX0xFTkdUSF0udHlwZSA9
IF9EUk1fU1RBVF9QQ0lfRkJfTEVOR1RIOworICAgICAgICAgICAgc3RhdHMu
ZGF0YVtfRFJNX1NUQVRfUENJX0ZCX0xFTkdUSF0udmFsdWUgPSAwOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBzdGF0cy5jb3VudCA9IF9EUk1fU1RB
VF9NQVg7CisgICAgICAgICAgICBEUk1fREVCVUcoIlYxLjEgc3RhdCBzaXpl
ICVkXG4iLCBzdGF0X3NpemUpOworICAgICAgICB9CiAKLQlpZiAoY29weV90
b191c2VyKChkcm1fc3RhdHNfdCAqKWFyZywgJnN0YXRzLCBzaXplb2Yoc3Rh
dHMpKSkKKwlpZiAoY29weV90b191c2VyKChkcm1fc3RhdHNfdCAqKWFyZywg
JnN0YXRzLCBzdGF0X3NpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1
cm4gMDsKIH0KQEAgLTMzNCw2ICszNjUsOSBAQAogCQlEUklWRVJfU0VUVkVS
U0lPTihkZXYsICZzdik7CiAjZW5kaWYKIAl9CisgICAgICAgIAorICAgICAg
ICBEUk0oaW50ZXJmYWNlKSA9IChyZXR2LmRybV9kaV9tYWpvciA8PCA4KSAr
IHJldHYuZHJtX2RpX21pbm9yOyAvKiBSZW1lbWJlciB0aGUgdmVyc2lvbiBz
ZXQgKi8KKyAgICAgICAgCiAJcmV0dXJuIDA7CiB9CiAK

--0-162739267-1070732219=:6798
Content-Type: application/octet-stream; name=rom
Content-Transfer-Encoding: base64
Content-Description: rom
Content-Disposition: attachment; filename=rom

PyBkaWZmCkluZGV4OiByYWRlb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL2RyaS94Yy94Yy9wcm9ncmFtcy9Yc2VydmVyL2h3
L3hmcmVlODYvb3Mtc3VwcG9ydC9zaGFyZWQvZHJtL2tlcm5lbC9yYWRlb24u
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNApkaWZmIC11IC11IC1yMS4y
NCByYWRlb24uaAotLS0gcmFkZW9uLmgJNSBOb3YgMjAwMyAwMjo0Mjo1NiAt
MDAwMAkxLjI0CisrKyByYWRlb24uaAk2IERlYyAyMDAzIDA2OjIyOjI2IC0w
MDAwCkBAIC0xMTIsNiArMTEyLDcgQEAKICBbRFJNX0lPQ1RMX05SKERSTV9J
T0NUTF9SQURFT05fSVJRX0VNSVQpXSAgID0geyByYWRlb25faXJxX2VtaXQs
ICAgIDEsIDAgfSwgXAogIFtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1JBREVP
Tl9JUlFfV0FJVCldICAgPSB7IHJhZGVvbl9pcnFfd2FpdCwgICAgMSwgMCB9
LCBcCiAgW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfUkFERU9OX1NFVFBBUkFN
KV0gICA9IHsgcmFkZW9uX2NwX3NldHBhcmFtLCAxLCAwIH0sIFwKKyBbRFJN
X0lPQ1RMX05SKERSTV9JT0NUTF9SQURFT05fR0VUVkJJT1MpXSAgID0geyBy
YWRlb25fZ2V0dmJpb3MsICAgICAxLCAwIH0sIFwKIAogI2RlZmluZSBEUklW
RVJfUENJX0lEUwkJCQkJCQlcCiAJezB4MTAwMiwgMHg0MjQyLCAwLCAiQVRJ
IFJhZGVvbiBCQiBSMjAwIEFJVyA4NTAwRFYifSwJCVwKSW5kZXg6IHJhZGVv
bl9kcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L2RyaS94Yy94Yy9wcm9ncmFtcy9Yc2VydmVyL2h3L3hmcmVlODYvb3Mtc3Vw
cG9ydC9zaGFyZWQvZHJtL2tlcm5lbC9yYWRlb25fZHJtLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTgKZGlmZiAtdSAtdSAtcjEuMTggcmFkZW9uX2Ry
bS5oCi0tLSByYWRlb25fZHJtLmgJNCBOb3YgMjAwMyAwMDo0NjowNSAtMDAw
MAkxLjE4CisrKyByYWRlb25fZHJtLmgJNiBEZWMgMjAwMyAwNjoyMjozMCAt
MDAwMApAQCAtMzkxLDYgKzM5MSw3IEBACiAvKiBhZGRlZCBieSBDaGFybCBQ
LiBCb3RoYSAtIHNlZSByYWRlb25fY3AuYyBmb3IgZGV0YWlscyAqLwogI2Rl
ZmluZSBEUk1fSU9DVExfUkFERU9OX0NQX1JFU1VNRSAgRFJNX0lPKDB4NTgp
CiAjZGVmaW5lIERSTV9JT0NUTF9SQURFT05fU0VUUEFSQU0gICBEUk1fSU9X
KDB4NTksIGRybV9yYWRlb25fc2V0cGFyYW1fdCkKKyNkZWZpbmUgRFJNX0lP
Q1RMX1JBREVPTl9HRVRWQklPUyAgIERSTV9JT1dSKDB4NWEsIGRybV9yYWRl
b25fZ2V0dmJpb3NfdCkKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9p
bml0IHsKIAllbnVtIHsKQEAgLTUyMiw2ICs1MjMsMTAgQEAKIAlpbnQgZGlz
Y2FyZDsKIH0gZHJtX3JhZGVvbl9pbmRpcmVjdF90OwogCit0eXBlZGVmIHN0
cnVjdCBkcm1fcmFkZW9uX2dldHZiaW9zIHsKKyAgICAgICAgdW5zaWduZWQg
bG9uZyBsZW5ndGg7CisJY29uc3Qgdm9pZCAqZGF0YTsKK30gZHJtX3JhZGVv
bl9nZXR2Ymlvc190OwogCiAvKiAxLjM6IEFuIGlvY3RsIHRvIGdldCBwYXJh
bWV0ZXJzIHRoYXQgYXJlbid0IGF2YWlsYWJsZSB0byB0aGUgM2QKICAqIGNs
aWVudCBhbnkgb3RoZXIgd2F5LiAgCkBAIC01MzksNiArNTQ0LDEyIEBACiAj
ZGVmaW5lIFJBREVPTl9QQVJBTV9TQVJFQV9IQU5ETEUgICAgICAgICAgOQog
I2RlZmluZSBSQURFT05fUEFSQU1fR0FSVF9URVhfSEFORExFICAgICAgIDEw
CiAjZGVmaW5lIFJBREVPTl9QQVJBTV9TQ1JBVENIX09GRlNFVCAgICAgICAg
MTEKKy8qIEFkZGVkIHdpdGggRFJNIHZlcnNpb24gWC5YICovCisjZGVmaW5l
IFJBREVPTl9QQVJBTV9GQl9TVEFSVCAgICAgICAgICAgICAgMTIKKyNkZWZp
bmUgUkFERU9OX1BBUkFNX0ZCX0xFTkdUSCAgICAgICAgICAgICAxMworI2Rl
ZmluZSBSQURFT05fUEFSQU1fTU1JT19TVEFSVCAgICAgICAgICAgIDE0Cisj
ZGVmaW5lIFJBREVPTl9QQVJBTV9NTUlPX0xFTkdUSCAgICAgICAgICAgMTUK
KyNkZWZpbmUgUkFERU9OX1BBUkFNX1ZCSU9TX0xFTkdUSCAgICAgICAgICAx
NgogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2dldHBhcmFtIHsKIAlp
bnQgcGFyYW07CkluZGV4OiByYWRlb25fZHJ2LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9kcmkveGMveGMvcHJvZ3JhbXMvWHNl
cnZlci9ody94ZnJlZTg2L29zLXN1cHBvcnQvc2hhcmVkL2RybS9rZXJuZWwv
cmFkZW9uX2Rydi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYg
LXUgLXUgLXIxLjIzIHJhZGVvbl9kcnYuaAotLS0gcmFkZW9uX2Rydi5oCTQg
Tm92IDIwMDMgMDA6NDY6MDUgLTAwMDAJMS4yMworKysgcmFkZW9uX2Rydi5o
CTYgRGVjIDIwMDMgMDY6MjI6MzIgLTAwMDAKQEAgLTE5NSw2ICsxOTUsOCBA
QAogZXh0ZXJuIHZvaWQgcmFkZW9uX21lbV90YWtlZG93biggc3RydWN0IG1l
bV9ibG9jayAqKmhlYXAgKTsKIGV4dGVybiB2b2lkIHJhZGVvbl9tZW1fcmVs
ZWFzZSggRFJNRklMRSBmaWxwLCBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwICk7
CiAKK2V4dGVybiBpbnQgcmFkZW9uX2dldHZiaW9zKCBEUk1fSU9DVExfQVJH
UyApOworCiAJCQkJLyogcmFkZW9uX2lycS5jICovCiBleHRlcm4gaW50IHJh
ZGVvbl9pcnFfZW1pdCggRFJNX0lPQ1RMX0FSR1MgKTsKIGV4dGVybiBpbnQg
cmFkZW9uX2lycV93YWl0KCBEUk1fSU9DVExfQVJHUyApOwpAQCAtMjQyLDYg
KzI0NCw5IEBACiAjZGVmaW5lIFJBREVPTl9DUlRDMl9PRkZTRVQJCTB4MDMy
NAogI2RlZmluZSBSQURFT05fQ1JUQzJfT0ZGU0VUX0NOVEwJMHgwMzI4CiAK
KyNkZWZpbmUgUkFERU9OX01QUF9UQl9DT05GSUcJCTB4MDFjMAorI2RlZmlu
ZSBSQURFT05fTUVNX0NOVEwJCQkweDAxNDAKKwogI2RlZmluZSBSQURFT05f
UkIzRF9DT0xPUk9GRlNFVAkJMHgxYzQwCiAjZGVmaW5lIFJBREVPTl9SQjNE
X0NPTE9SUElUQ0gJCTB4MWM0OAogCkluZGV4OiByYWRlb25fc3RhdGUuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2RyaS94Yy94
Yy9wcm9ncmFtcy9Yc2VydmVyL2h3L3hmcmVlODYvb3Mtc3VwcG9ydC9zaGFy
ZWQvZHJtL2tlcm5lbC9yYWRlb25fc3RhdGUuYyx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yNApkaWZmIC11IC11IC1yMS4yNCByYWRlb25fc3RhdGUuYwot
LS0gcmFkZW9uX3N0YXRlLmMJNCBOb3YgMjAwMyAwMDo0NjowNSAtMDAwMAkx
LjI0CisrKyByYWRlb25fc3RhdGUuYwk2IERlYyAyMDAzIDA2OjIyOjM4IC0w
MDAwCkBAIC0yNyw2ICsyNyw3IEBACiAgKiAgICBLZXZpbiBFLiBNYXJ0aW4g
PG1hcnRpbkB2YWxpbnV4LmNvbT4KICAqLwogCisjaW5jbHVkZSA8bGludXgv
cGNpLmg+CiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAiZHJtUC5o
IgogI2luY2x1ZGUgImRybS5oIgpAQCAtMjM1OSwxNSArMjM2MCwxNSBAQAog
CWRybV9yYWRlb25fZ2V0cGFyYW1fdCBwYXJhbTsKIAlpbnQgdmFsdWU7CiAK
LQlpZiAoICFkZXZfcHJpdiApIHsKLQkJRFJNX0VSUk9SKCAiJXMgY2FsbGVk
IHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyApOwot
CQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwotCX0KKwlEUk1fREVCVUcoICJw
aWQ9JWRcbiIsIERSTV9DVVJSRU5UUElEICk7CiAKIAlEUk1fQ09QWV9GUk9N
X1VTRVJfSU9DVEwoIHBhcmFtLCAoZHJtX3JhZGVvbl9nZXRwYXJhbV90ICop
ZGF0YSwKIAkJCSAgICAgc2l6ZW9mKHBhcmFtKSApOwogCi0JRFJNX0RFQlVH
KCAicGlkPSVkXG4iLCBEUk1fQ1VSUkVOVFBJRCApOworCWlmICggIWRldl9w
cml2ICYmIChwYXJhbS5wYXJhbSA8PSBSQURFT05fUEFSQU1fR0FSVF9URVhf
SEFORExFKSkgeworCQlEUk1fRVJST1IoICIlcyBjYWxsZWQgd2l0aCBubyBp
bml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fICk7CisJCXJldHVybiBE
Uk1fRVJSKEVJTlZBTCk7CisJfQogCiAJc3dpdGNoKCBwYXJhbS5wYXJhbSAp
IHsKIAljYXNlIFJBREVPTl9QQVJBTV9HQVJUX0JVRkZFUl9PRkZTRVQ6CkBA
IC0yNDAzLDYgKzI0MDQsMjEgQEAKIAljYXNlIFJBREVPTl9QQVJBTV9HQVJU
X1RFWF9IQU5ETEU6CiAJCXZhbHVlID0gZGV2X3ByaXYtPmdhcnRfdGV4dHVy
ZXNfb2Zmc2V0OwogCQlicmVhazsKKyAgICAgICAgY2FzZSBSQURFT05fUEFS
QU1fRkJfU1RBUlQ6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwY2lfcmVz
b3VyY2Vfc3RhcnQoIGRldi0+cGRldiwgMCApOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFJBREVPTl9QQVJBTV9GQl9MRU5HVEg6
CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwY2lfcmVzb3VyY2VfbGVuKCBk
ZXYtPnBkZXYsIDAgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBSQURFT05fUEFSQU1fTU1JT19TVEFSVDoKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHBjaV9yZXNvdXJjZV9zdGFydCggZGV2LT5wZGV2LCAy
ICk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkFE
RU9OX1BBUkFNX01NSU9fTEVOR1RIOgorICAgICAgICAgICAgICAgIHZhbHVl
ID0gcGNpX3Jlc291cmNlX2xlbiggZGV2LT5wZGV2LCAyICk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkFERU9OX1BBUkFNX1ZC
SU9TX0xFTkdUSDoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHBjaV9yZXNv
dXJjZV9sZW4oIGRldi0+cGRldiwgUENJX1JPTV9SRVNPVVJDRSApOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBEUk1f
RVJSKEVJTlZBTCk7CiAJfQpAQCAtMjQ0MiwzICsyNDU4LDEyMiBAQAogCiAJ
cmV0dXJuIDA7CiB9CisKKy8qCisgKiBGaW5kIHRoZSBleHRlbnQgb2YgYSBQ
Q0kgZGVjb2RlLi4KKyAqLworc3RhdGljIHUzMiBwY2lfc2l6ZSh1MzIgYmFz
ZSwgdTMyIG1heGJhc2UsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICAg
ICAgdTMyIHNpemUgPSBtYXNrICYgbWF4YmFzZTsgICAgICAvKiBGaW5kIHRo
ZSBzaWduaWZpY2FudCBiaXRzICovCisgICAgICAgIGlmICghc2l6ZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgLyogR2V0IHRoZSBsb3dlc3Qgb2YgdGhlbSB0byBmaW5k
IHRoZSBkZWNvZGUgc2l6ZSwgYW5kCisgICAgICAgICAgIGZyb20gdGhhdCB0
aGUgZXh0ZW50LiAgKi8KKyAgICAgICAgc2l6ZSA9IChzaXplICYgfihzaXpl
LTEpKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIC8q
IGJhc2UgPT0gbWF4YmFzZSBjYW4gYmUgdmFsaWQgb25seSBpZiB0aGUgQkFS
IGhhcworICAgICAgICAgICBhbHJlYWR5IGJlZW4gcHJvZ3JhbW1lZCB3aXRo
IGFsbCAxcy4gICovCisgICAgICAgIGlmIChiYXNlID09IG1heGJhc2UgJiYg
KChiYXNlIHwgc2l6ZSkgJiBtYXNrKSAhPSBtYXNrKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICByZXR1cm4gc2l6ZTsKK30KKworCitpbnQgcmFkZW9uX2dldHZiaW9zKCBE
Uk1fSU9DVExfQVJHUyApIHsKKwlEUk1fREVWSUNFOworCWRybV9maWxlX3Qg
KmZpbHBfcHJpdjsKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYg
PSBkZXYtPmRldl9wcml2YXRlOworCWRybV9yYWRlb25fZ2V0dmJpb3NfdCBn
YjsKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7
CisJdW5zaWduZWQgY2hhciAqcm9tOworCWludCBzaWdvazsKKworCWlmICgg
IWRldl9wcml2ICkgeworCQlEUk1fRVJST1IoICIlcyBjYWxsZWQgd2l0aCBu
byBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fICk7CisJCXJldHVy
biBEUk1fRVJSKCBFSU5WQUwgKTsKKwl9CisKKwlEUk1fR0VUX1BSSVZfV0lU
SF9SRVRVUk4oIGZpbHBfcHJpdiwgZmlscCApOworCisJRFJNX0NPUFlfRlJP
TV9VU0VSX0lPQ1RMKCBnYiwgKCBkcm1fcmFkZW9uX2dldHZiaW9zX3QqIClk
YXRhLAorCQkJCSAgc2l6ZW9mKCBnYiApICk7CisKKwkvKiBGaXggZnJvbSBB
VEkgZm9yIHByb2JsZW0gd2l0aCBSYWRlb24gaGFyZHdhcmUgbm90IGxlYXZp
bmcgUk9NIGVuYWJsZWQgKi8KKwlSQURFT05fV1JJVEUoUkFERU9OX01FTV9D
TlRMLCAwKTsKKwl0ZW1wID0gUkFERU9OX1JFQUQoUkFERU9OX01QUF9UQl9D
T05GSUcpOworCXByaW50ayhLRVJOX0VSUiAicmFkZW9uZmI6IHRlbXAgaXMg
JTA4eFxuIiwgdGVtcCApOworCXRlbXAgJj0gMHgwMGZmZmZmZnU7CisJdGVt
cCB8PSAweDA0IDw8IDI0OworCVJBREVPTl9XUklURShSQURFT05fTVBQX1RC
X0NPTkZJRywgdGVtcCk7CisJdGVtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9N
UFBfVEJfQ09ORklHKTsKKwlwcmludGsoS0VSTl9FUlIgInJhZGVvbmZiOiB0
ZW1wIGlzICUwOHhcbiIsIHRlbXAgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJLyog
bm8gbmVlZCB0byBzZWFyY2ggZm9yIHRoZSBST00sIGp1c3QgYXNrIHRoZSBj
YXJkIHdoZXJlIGl0IGlzLiAqLworCXIgPSAmZGV2LT5wZGV2LT5yZXNvdXJj
ZVtQQ0lfUk9NX1JFU09VUkNFXTsKKwkKKwkvKiBhc3NpZ24gdGhlIFJPTSBh
biBhZGRyZXNzIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgKi8KKy8vCWlmIChy
LT5wYXJlbnQgPT0gTlVMTCkKKwkJcGNpX2Fzc2lnbl9yZXNvdXJjZShkZXYt
PnBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpOworCQorCS8qIGVuYWJsZSBpZiBu
ZWVkZWQgKi8KKy8vCWlmICghKHItPmZsYWdzICYgUENJX1JPTV9BRERSRVNT
X0VOQUJMRSkpIHsKK3sKKwkJdTMyIGxvYywgc2l6ZTsKKwkJcGNpX3JlYWRf
Y29uZmlnX2R3b3JkKGRldi0+cGRldiwgUENJX1JPTV9BRERSRVNTLCAmbG9j
KTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYtPnBkZXYsIFBDSV9S
T01fQUREUkVTUywgflBDSV9ST01fQUREUkVTU19FTkFCTEUpOworCQlwY2lf
cmVhZF9jb25maWdfZHdvcmQoZGV2LT5wZGV2LCBQQ0lfUk9NX0FERFJFU1Ms
ICZzaXplKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYtPnBkZXYs
IFBDSV9ST01fQUREUkVTUywgbG9jKTsKKwkJc2l6ZSA9IHBjaV9zaXplKGxv
Yywgc2l6ZSwgUENJX1JPTV9BRERSRVNTX01BU0spOworCQlwcmludGsoS0VS
Tl9FUlIgInJhZGVvbmZiOiBiYXNlIGlzICUwOHggJTA4eFxuIiwgbG9jLCBz
aXplICk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LT5wZGV2LCBQ
Q0lfUk9NX0FERFJFU1MsIHItPnN0YXJ0IHwgUENJX1JPTV9BRERSRVNTX0VO
QUJMRSk7CisJCXItPmZsYWdzIHw9IFBDSV9ST01fQUREUkVTU19FTkFCTEU7
CisJCXByaW50ayhLRVJOX0VSUiAicmFkZW9uZmI6IHIgaXMgJTA4bHggJTA4
bHhcbiIsIHItPnN0YXJ0LCByLT5lbmQgKTsKKwkJcGNpX3JlYWRfY29uZmln
X2R3b3JkKGRldi0+cGRldiwgUENJX1JPTV9BRERSRVNTLCAmbG9jKTsKKwkJ
cHJpbnRrKEtFUk5fRVJSICJyYWRlb25mYjogZW5hYmxlIGlzICUwOHhcbiIs
IGxvYyApOworfQorLy8JfQorCQorCWdiLmxlbmd0aCA9IG1pbiggZ2IubGVu
Z3RoLCBwY2lfcmVzb3VyY2VfbGVuKCBkZXYtPnBkZXYsIFBDSV9ST01fUkVT
T1VSQ0UgKSk7CisJcm9tID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0g
ci0+c3RhcnQgKyAxKTsKKwlpZiAocm9tKSB7CisJCisJCXNpZ29rID0gKChy
ZWFkYihyb20pID09IDB4NTUpICYmIChyZWFkYihyb20gKyAxKSA9PSAweEFB
KSk7CisKKwkJaWYgKHNpZ29rKQorCQkJRFJNX0NPUFlfVE9fVVNFUiggZ2Iu
ZGF0YSwgcm9tLCBnYi5sZW5ndGgpOworCQllbHNlCisJCQlwcmludGsoS0VS
Tl9FUlIgInJhZGVvbmZiOiBTaWduYXR1cmUgd3JvbmcgJTAyeCAlMDJ4XG4i
LCAqKHVuc2lnbmVkIGNoYXIgKilyb20sICooKHVuc2lnbmVkIGNoYXIgKily
b20rMSkgKTsKKwkJCisJCWlvdW5tYXAocm9tKTsKKwkJCisJCWlmIChyLT5w
YXJlbnQpIHsKKwkJCXJlbGVhc2VfcmVzb3VyY2Uocik7CisJCQlyLT5mbGFn
cyAmPSB+UENJX1JPTV9BRERSRVNTX0VOQUJMRTsKKwkJCXItPmVuZCAtPSBy
LT5zdGFydDsKKwkJCXItPnN0YXJ0ID0gMDsKKwkJfQorCQkvKiBUaGlzIHdp
bGwgZGlzYWJsZSBhbmQgc2V0IGFkZHJlc3MgdG8gdW5hc3NpZ25lZCAqLwor
CQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldi0+cGRldiwgUENJX1JPTV9B
RERSRVNTLCAwKTsKKwkJCisJCWlmIChzaWdvaykgeworCQkJRFJNX0NPUFlf
VE9fVVNFUl9JT0NUTCggKGRybV9yYWRlb25fZ2V0dmJpb3NfdCAqKWRhdGEs
IGdiLCBzaXplb2YoZ2IpICk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxz
ZSAKKwkJcHJpbnRrKEtFUk5fRVJSICJyYWRlb25mYjogUk9NIGZhaWxlZCB0
byBtYXBcbiIpOworCisJcm9tID0gaW9yZW1hcCgweEMwMDAwLCByLT5lbmQg
LSByLT5zdGFydCArIDEpOworCURSTV9DT1BZX1RPX1VTRVIoIGdiLmRhdGEs
IHJvbSwgZ2IubGVuZ3RoKTsKKwlEUk1fQ09QWV9UT19VU0VSX0lPQ1RMKCAo
ZHJtX3JhZGVvbl9nZXR2Ymlvc190ICopZGF0YSwgZ2IsIHNpemVvZihnYikg
KTsKKwlpb3VubWFwKHJvbSk7CisJcmV0dXJuIDA7CisvKgkKKwlwcmludGso
S0VSTl9FUlIgInJhZGVvbmZiOiBST00gZmFpbGVkIHRvIG1hcFxuIik7CisJ
Z2IubGVuZ3RoID0gMDsKKwlEUk1fQ09QWV9UT19VU0VSX0lPQ1RMKCAoZHJt
X3JhZGVvbl9nZXR2Ymlvc190ICopZGF0YSwgZ2IsIHNpemVvZihnYikgKTsK
KwlyZXR1cm4gLTE7CisqLworfQo=

--0-162739267-1070732219=:6798--